-1

次のエラーを解決するにはどうすればよいですか?

致命的なエラー: 27 行目の index.php の非オブジェクトに対するメンバー関数 fetch_assoc() の呼び出し コール スタック: 0.0000 644064 1. {main}() index.php:0

これは私がこれまで実行しているコードです:

$sql = 'SELECT * FROM pm_user WHERE name='.$_SESSION['pmname'].'';
$result = $pdo->query($sql);
$row = $result->fetch_assoc(); // line 27
echo $row['img'];

前もって感謝します

4

2 に答える 2

5

問題は次のとおりです。

  • クエリ内で値を補間しています。これは悪いことです。代わりに、PDO のプリペアド ステートメント機能を使用する必要があります。

  • この不適切で間違った補間を行う過程で、文字列の引用符を追加するのを忘れて、SQL クエリが無効になります。

  • でエラー チェックをまったく実行できませんでした->query()query()失敗すると返されるFALSEので、 で実行しようとし->fetch()ましたFALSE

これらすべてを修正します。

于 2013-02-01T23:55:23.397 に答える
1

プログラムでエラーが発生した場合は、呼び出したすべての関数の戻り値を確認してください

// use quote or prepared statements to prevent from 
// SQL injection attacks!
$pmname = $pdo->quote($_SESSION['pmname']);
$sql = "SELECT * FROM pm_user WHERE name=$pmname";

$result = $pdo->query($sql);
if($result === FALSE) {
    echo 'oops! the query failed! ';
    print_r($pdo->errorInfo());
}

$row = $result->fetch_assoc();

if($row) {
    echo $row['img'];
} else {
    echo 'the query return no records :(';
}

display_errors=1 さらに、開発中に php.ini ディレクティブを設定して、'白い画面' の代わりに php エラー メッセージを表示することを検討する必要があります。次のコード行を使用して、スクリプトごとに有効にすることもできます。

ini_set('display_errors', 1);
于 2013-02-01T23:49:54.267 に答える