web-dev-qa-db-ja.com

非オブジェクトMySQLi結果のプロパティを取得しようとしています

少しPHP私が苦労しているコード-Googleなどを検索して、言及されているすべてを試しましたが、何らかの理由でそれを解決するのに問題があります。

問題は:

特定のユーザーの存在をデータベースに照会するコードがいくつかあります。

コード(クラス内のメソッドです)

_<?php
global $mysqli;
// Query specified database for value
$q = 'SELECT id FROM ' . $database . ' WHERE username = \'' . $username . '\'';
$r = $mysqli->query($q);
var_dump($r);
if ($r->num_rows) {
    // If row found username exists so return false
    return false;
}
...
?>
_

クエリの結果($ r)をvarダンプして、次のようにしました。

_object(mysqli_result)#4 (5) { ["current_field"]=> int(0) ["field_count"]=> int(1) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) }
_

これは正しいです。上記のように1行だけにする必要があります。

if ($r->num_rows) {という行にリンクしているこのエラーが発生します

注意:LINE行のFILEで非オブジェクトのプロパティを取得しようとしています

しかし、オブジェクトが(上記のように)有効であり、正常に機能しているはずなので、理由はわかりません。私の知る限り、問題はないようですが、なぜエラーがあるのか​​疑問に思っています。簡単なことだと思いますが、助けていただければ幸いです。

6
Rick Hanshaw
$sql = "SELECT * FROM table";
$result = $conn->query($sql);

if (!$result) {
    trigger_error('Invalid query: ' . $conn->error);
}

mysqli_error()関数でエラーを確認してください

おそらくあなたのクエリにはいくつかの欠点があります。

22
kemalatila

問題の原因は単純です。非常に多くの人が同じ問題に遭遇するでしょう。私もそうだったので、理解するのに1時間かかりました。万が一、他の誰かがつまずいた場合に備えて、問題はクエリにあります。selectステートメントはテーブル名の代わりに$dbnameを呼び出しています。したがって、falseであるbooleanを返すことは見つかりませんでした。幸運を。

0
Oxygen Airy