私は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);
それはあなたのコードをより短くそしてより読みやすくします。
クエリはおそらく失敗し、mysqli::query
はFALSEを返しました。したがって、$runGetChartData
はmysqli_result
オブジェクトではなく、boolean
であるため、エラーが発生します。
から ドキュメント :
失敗するとFALSEを返します。 SELECT、SHOW、DESCRIBE、またはEXPLAINクエリが成功すると、mysqli_query()はmysqli_resultオブジェクトを返します。その他の成功したクエリの場合、mysqli_query()はTRUEを返します。