1

MySQL データベースのテーブルをクエリすると、エラーが発生します。渡される変数に値がない場合、これは mysqli_num_rows を使用した標準的なものです。

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in folder/file.php on line 29

問題は、構文エラーが見つからないことです。私はそれを何度も見てきました。私のコードは次のとおりです。

$sql_messages = "SELECT * FROM messages WHERE to='$userid'";
$result_messages = $mysqli->query($sql_messages);
$num_rows_messages = mysqli_num_rows($result_messages);

フェッチ配列を試しましたが、同様のエラーが発生しました。$result_messages には何も渡されていないと思います。私は $userid をエコーアウトし、それには値があり、データベースをチェックしたところ、「to」フィールドを持つテーブル「messages」があります。このクエリの前に次のコードがあるため、適切なデータベースに接続しています。

$sql="SELECT * FROM users WHERE firstname='$firstname' && lastname='$lastname'";
$result = $mysqli->query($sql);
$row = mysqli_fetch_array($result);

そして、それはうまくいきます。ページの 3 番目のクエリですが、何らかの制限はありますか? 私が見落としている構文エラーを見た人はいますか? ありがとうございます、ちょっとしたミスでしたらすみません!

4

1 に答える 1

4

これは、 docsよると、エラーが発生したときに実行される$mysqli->query()boolean が返されたためです。および にアクセスすると、エラーの詳細を取得できます。FALSEmysqli::query()$mysqli->errno$mysqli->error

to問題の根本は、MySQL の予約語であるという列を参照するクエリにあると推測しています。toクエリ内の単語をバッククォートで囲んでみてください。このような:

$sql_messages = "SELECT * FROM messages WHERE `to`='$userid'";

確かに、列とテーブルの予約語の命名は避けるべきですが。可能であれば、列の名前を変更することを検討してください。

于 2012-11-15T06:17:40.663 に答える