2017-10-03 15 views
2

私は、MySQLデータベース内のテーブル名の配列を実行し、mysqliクエリを実行してテーブルのインデックスを再作成するforeachループを持っています。PHP mysqli_queryがforeachループで動作しない

クエリとループの両方が正常に機能しているようですが、特定の数のテーブルの後にクエリが機能しなくなります。

単純に各テーブル名をエコー表示すると、すべてのテーブル名が表示されるので、ループ内のテーブルが欠落していないことがわかります。最初の数テーブルが正しく再インデックス化されていることがわかります。それは約50テーブル後に動作を停止するようだ。ここで

はループです:

foreach($tables as $table) { 
    mysqli_multi_query($connect, "SET @newid=0; UPDATE $table SET ID=(@newid:[email protected]+1) ORDER BY ID;"); 
} 

そのトップの停止作業を引き起こしている可能性がありますどのように多くのクエリが立て続けに実行されているので、MySQLのタイムアウトや操作を壊すのですか?他に何か?私が手mysqli_error使用

コマンドを同期していが、

+0

あなたは '動作しなくなった' とはどういう意味ですか?間違いはありますか? – brain99

+0

エラーはありませんが、配列の後のテーブルでは、IDは1,2,3などにリセットされません。1,2,5,8 – Edward144

+0

@ brain99のようになります。エラーメッセージ – Edward144

答えて

1

MySQLクエリで複数の結果セットが返され、これらのうちのいくつかが依然としてフェッチされているため、このエラーが表示される前に必ず表示されます。これはストアドプロシージャを使用する場合にも一般的です。この問題を診断するには、あなたが別のクエリを実行しようとする前に、保留中の結果セットがフェッチされることを確認するためにあなたのループの最後に次のような行を置くことが原因である:

while(mysqli_more_results($Conn)) mysqli_next_result($Conn); 

は(接続を変更することを忘れないでくださいを$Connあなたのものが何であれ)。さらなる情報と例へのリンクがいくつかあります。

http://php.net/manual/en/mysqli.more-results.php https://www.w3schools.com/php/func_mysqli_next_result.asp

よろしく、

ジェームズ

関連する問題