1

mysqli関数(mysqli_connect, mysqli_select_db, mysqli_query)を使用して、1つのselectクエリと2つのストアドプロシージャを呼び出しています。

同じ$connection(によって返されるmysqli_connect)を複数回使用すると、次のエラーメッセージが表示されるようです。"Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in..."

以下は私のコードです:

<?php
$server="localhost";
$user="user";
$pass="pass";
$db="db";

$connection=mysqli_connect("$server","$user","$pass");
mysqli_select_db($connection, "$db") or die('Unable to select database.');

//First SELECT using $connection
$query=mysqli_query($connection, "SELECT item_name FROM items ORDER BY item_name DESC");    

While ($result=mysqli_fetch_array($query,MYSQL_NUM))
{
  $complete_result[] = $result[0];
  $total_rows = $total_rows + 1;
}   

//CALL to first sp using $connection
$query2 = mysqli_query($connection, "CALL sp_check_edits_remaining()");

while ($row2 = mysqli_fetch_array($query2, MYSQL_ASSOC)) {
    $edits_remaining = $row2['edits_remaining'];
} // End while

//CALL to second sp using $connection   
$query3 = mysqli_query($connection, "CALL sp_edit_data");

while ($row3 = mysqli_fetch_array($query3, MYSQL_ASSOC)) {);
    $edits_id = $row3['id'];
} // End while

?>

説明したように、2番目のspを呼び出すと、上記のコードで上記のエラーメッセージが表示されます。(接続が閉じられることはありませんのでご注意ください。)

ただし、別の接続を作成して2番目のsp呼び出しに提供すると、このエラーは表示されなくなります。これは以下のコードに示されています

$connection2=mysqli_connect("$server","$user","$pass");
mysqli_select_db($connection2, "$db") or die('Unable to select database.');

//CALL to second sp using $connection   
$query3 = mysqli_query($connection2, "CALL sp_edit_data");

while ($row3 = mysqli_fetch_array($query3, MYSQL_ASSOC)) {
    $edits_id = $row3['id'];
} // End while

なぜこの予期しない動作が発生するのか、誰か助けてくれませんか?よろしくお願いします!

4

3 に答える 3

2

私のシナリオに固有の解決策を見つけたようです。

私のストアド プロシージャは、結果セットで 1 行だけを返します。

したがって、最初の sp への CALL と対応する while ループの後に、次のように単純に追加しました。

mysqli_next_result($connection);

これにより、受け取っていたエラー メッセージ/警告が削除されました。

これが「プロの」アプローチかどうかコメントしたい人はいますか?

于 2012-10-08T07:44:25.800 に答える
1

どこかにエラーがあり、mysql 関数の 1 つ (おそらくクエリ呼び出し) がブール値の false を返し、それをやみくもにフェッチ呼び出しで使用します。追加のエラー処理を追加する必要があります。

$query = mysqli_query($connection, "...") or die(mysqli_error($connection));    

クエリが成功したと想定しないでください。

于 2012-10-08T04:56:31.197 に答える
0

クエリが終了した後でコードを入力すると、 を閉じて$connection別のクエリを実行し、接続して再度 を割り当てる必要があります$connection

mysqli_close($connection);

$connection=mysqli_connect(bla,bla,bla,bla).
于 2015-05-06T21:16:52.827 に答える