0

2ページ目に以下のメッセージが表示されますが、何も機能しません...

Fatal error: Call to a member function fetch_assoc() on a non-object in C:\xampp\htdocs\send.php on line 6

これが私がEメールアドレスを表示する最初のページであり、それはうまく機能しますが、Eメールをクリックしてinfo.phpに行くと、そのエラーが発生します。何が問題なのですか?

 <?php
 $mydb = new mysqli('localhost', 'root', '', 'database');
 $sql = "SELECT * FROM test ";
 $result = $mydb->query($sql);

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

 echo '<td><a href="info.php?email='.$row['Email'].'">'.$row['Email'].'</a>    </td>';

 echo "<br/>";
 }
 $mydb->close ();

 ?>

ここにinfo.phpがあります。データベースの同じテーブルにある単一ユーザーの行AgeとNameを表示しようとしていることを覚えておいてください。

<?php
$mydb = new mysqli('localhost', 'root', '', 'database');
$sql = "SELECT * FROM User WHERE id = " . $_GET['email'];
$result = $mydb->query($sql);

while( $row = $result->fetch_assoc() ){
echo $row['Age'] . " " . $row['Name'] ;
echo "<br/>";
}
$mydb->close (); 
?>
4

2 に答える 2

2

これは、クエリが正しく実行されなかったことを意味します。チェックを入れる必要があります:

if (!$result) {
    echo $mydb->error;
}

die();

プリペアドステートメント

ユーザー入力を取得しているので、これらを使用する必要があります。プリペアドステートメントは、ユーザーがデータベースを混乱させないように、適切なレベルのクレンジング入力を提供します。

また、メール用の列があるようですが、以下に基づいてユーザーを選択しようとしています。

id=メール。

idをINTにするのが一般的な方法であり、電子メールはおそらくVARCHARになるため、この比較は意味がありません(テーブルスキーマが一般的な方法に従っている場合)

于 2013-01-10T00:27:52.100 に答える
1

メールアドレスを引用符で囲んでいないため、クエリは失敗します。

$sql = "SELECT * FROM User WHERE id = '" . $_GET['email'] . "'";
于 2013-01-10T00:29:27.773 に答える