2013-02-01 13 views
6

私はmysqliを初めて使い、基本的なことを学び始めました。この私の例(http://php.net/manual/en/mysqli-result.fetch-array.php)に関して、私はfetch_arrayを試していました。ここに私のコードです。mysqli-fetch_Arrayは、非オブジェクトmysqliのメンバ関数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(); 

ここで私は条件行の隣の行にあるオブジェクト以外のメンバー関数fetch_array()を呼び出してこのエラーを受け取ります。私はそれをグーグルで試してみたが、私の問題の結果は得られなかった。私の質問ははっきりしていると思う。前もって感謝します。

答えて

16

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

$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); 

これはコードを短くて読みやすくします。

+0

ありがとうございます。あなたの提案に対して訂正を行った後に動作します。 –

+4

それはこれを説明する素晴らしい方法でした、+1。 –

7

クエリが失敗し、mysqli::queryがFALSEを返しました。したがって$runGetChartDatamysqli_resultオブジェクトではなく、booleanというエラーが発生しています。失敗した場合にFALSE

戻り値:the documentationから

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

+0

誰かがdownvoteを説明したいですか? –

関連する問題