web-dev-qa-db-ja.com

mysqli-非オブジェクトmysqliでのメンバー関数fetch_array()へのfetch_Arrayエラー呼び出し

私はmysqliを初めて使用し、基本的なことを学び始めました。このiの例( http://php.net/manual/en/mysqli-result.fetch-array.php )に関して、私はfetch_arrayを試していました。これが私のコードです。

$sqlGetChartData    =   "SELECT date, ratepersqft, location 
                          FROM ratepersqft
                         WHERE project_id = 1";
$runGetChartData    =   $mysqli->query($sqlGetChartData);

while($rowGetChartData = $runGetChartData->fetch_array(MYSQLI_BOTH))
    $arrGetChartData[]  =   $rowGetChartData;

    print "<pre>";
    print_r($arrGetChartData);
    exit();

ここで、このエラーが発生します。while条件行の隣の行にある非オブジェクトのメンバー関数fetch_array()を呼び出します。グーグルしてみましたが、問題の結果が得られませんでした。私の質問が明確であることを願っています。前もって感謝します。

クエリを実行するときは、常にエラーをチェックしてください。
そして、不必要に長い変数でコードを拡張しないでください

$arrChartData[] = array();
$sql = "SELECT date, ratepersqft, location FROM ratepersqft WHERE project_id = 1";
$res = $mysqli->query($sql) or trigger_error($mysqli->error."[$sql]");
while($row = $res->fetch_assoc()) {
    $arrChartData[] = $row;
}

最初の変数には、プログラムで特別な意味を持たないSQLコードのみが含まれており、次の行に配置されます。
2番目の変数にはmysqliの結果が含まれています。二度と特別な意味はありません。従来の名前を使用してもかまいません。
同じことが一時的な$row変数にも当てはまります。
コードで特別な意味を持つ唯一の変数は$arrChartData[]です。したがって、意味のある名前を付けてください。ただし、入力する前に初期化する必要があります。

そして、mysqliエラーをPHPエラーに変換するtrigger_error部分に注意してください。すべてのmysqlエラーが通知されるように、常にこの方法でクエリを実行してください

ちなみに、一時変数をある種のヘルパー関数に移動して、アプリケーションコードを次の2行のように単純にすることで、すべての一時変数を取り除くことをお勧めします。

$sql = "SELECT date, ratepersqft, location FROM ratepersqft WHERE project_id = 1";
$arrChartData[] = dbGetAll($sql);

それはあなたのコードをより短くそしてより読みやすくします。

17

クエリはおそらく失敗し、mysqli::queryはFALSEを返しました。したがって、$runGetChartDatamysqli_resultオブジェクトではなく、booleanであるため、エラーが発生します。

から ドキュメント

失敗するとFALSEを返します。 SELECT、SHOW、DESCRIBE、またはEXPLAINクエリが成功すると、mysqli_query()はmysqli_resultオブジェクトを返します。その他の成功したクエリの場合、mysqli_query()はTRUEを返します。

8
lc.