2

GET メソッドを使用してデータベース内のテーブルを選択しようとしています。そこにある変数の値 (テーブル名) をハードコーディングすると、期待どおりに機能し、値が配列に返されます。

しかし、変数を介してテーブル名を決定しようとすると、次のエラーが発生します。

致命的なエラー: 非オブジェクトでメンバ関数 fetch_array() を呼び出しています

今私は試してみましたvar_dump($result);が、それは戻りますbool(false)

これで、変数は値を持ちます。これを画面にエコーバックすると、期待する値が得られるからです。

では、テーブル検索のクエリを作成するときに値が返されないのはなぜですか?

     $result = $mysqli->query("SELECT * FROM PodcastSermons  WHERE sermonSeries = ". $series); //This where a change needs to happen

    var_dump($result);

        $posts = array();

        while($row = $result->fetch_array()) 
        {    
            $ID=$row['ID'];
            $sermonTitle=$row['sermonTitle'];
            $sermonSpeaker=$row['sermonSpeaker'];
            $sermonSeries=$row['sermonSeries'];
            $sermonDate=$row['sermonDate'];
            $linkToImage=$row['linkToImage'];
            $linkToAudioFile=$row['linkToAudioFile'];

            $posts []= array (
                'ID'=> $ID,
                'sermonTitle'=> $sermonTitle,
                'sermonSpeaker'=> $sermonSpeaker,
                'sermonSeries'=> $sermonSeries,
                'sermonDate'=> $sermonDate,
                'linkToImage'=> $linkToImage,
                'linkToAudioFile'=> $linkToAudioFile
            );
    }

    $response['posts'] = $posts;

    var_dump($posts);

PS mysql スタイルの減価償却について読んだことがありますが、mysqli の記述を使用する必要があることを知っています。PHP バージョン 5.2.6-1+lenny16 を実行しています

4

6 に答える 6

3

今私は試してみましたvar_dump($result);が、それは戻りますbool(false)

クエリが失敗したためです。

試す:

if( ! $result = $mysqli->query("SELECT * FROM PodcastSermons  WHERE sermonSeries = ". $series); ) {
  echo "An error has occurred: \n" . var_export($mysqli->error_list, TRUE);
} else {
  //do stuff
}
于 2013-01-11T22:27:56.213 に答える
3

が文字列の場合$seriesは、変数を引用符で囲む必要があります..

試す...

$result = $mysqli->query("SELECT * FROM PodcastSermons  WHERE sermonSeries = '". $series ."'");

それが役に立てば幸い。

于 2013-01-11T22:46:25.133 に答える
1

中心的な質問は私には思えます: どこ$seriesから来たのですか? その変数はどこで初期化されますか?

これを Web フォームから渡す場合は、$_GETまたは$_POST(フォームで使用するアクション) のいずれかを使用します。そして、SQL インジェクション攻撃に対して脆弱にならないように、そこから来るものをサニタイズする必要があります。この場合、プリペアド ステートメントが役に立ちます。これらは、この種の攻撃に対してスクリプトを強化するのに役立ちます。

于 2013-01-11T22:32:05.360 に答える
1

これを試して

$result = $mysqli->query("SELECT * FROM PodcastSermons  WHERE sermonSeries = '$series' ");
于 2013-01-11T22:32:11.383 に答える
1

$result = $mysqli->query("SELECT * FROM PodcastSermons WHERE sermonSeries = ". $series); //This where a change needs to happen

$seriesvariable:がユーザー定義の場合は、Prepared Statements を使用する必要があります。

$result->prepare("SELECT * FROM PodcastSermons WHERE `sermonSeries`=?");
$result->bind_param('s', $series);
$result->execute();

また、Print_r($result); イニシャル$resultが入力されているかどうかを確認する。さらに、SQL クエリではsermonSeries、SQL テーブルと適切に一致していますか?

アップデート:

while($row = $result->fetch_array()) 
        {    

これを次のように変更してみてください:

while($row = $result->fetch_array(MYSQLI_ASSOC))
{

http://uk1.php.net/manual/en/mysqli-result.fetch-array.php

于 2013-01-11T22:30:52.700 に答える
0

あなたのクエリは単に失敗します。var_dump($series); を確認してください。実行する前に。

文字列かもしれないと思いますが、引用していませんか?

ヒント: $mysqli->query を呼び出す前に、最初にコマンド テキストで文字列を作成します。その文字列を使用します ($mysqli->query($cmd); のように)。

その文字列をダンプします:)あなたの目を開くかもしれません;)

そうすれば、それを抽出して、データベースに対して直接実行できます (fe phpmyadmin)。

于 2013-01-11T22:30:43.997 に答える