mysql php
ストアド プロシージャを一度呼び出してから他のクエリを実行するとエラーが発生するのはなぜですか?
----------------------------------------------- - ------------
PHP が mysql ストアド プロシージャを呼び出してテーブル内のすべてのデータをクエリし、通常どおりに結果を取得するようにしたいです。
他のクエリを実行するときは、ステートメントが何であるかに関係なく、すぐに結果を取得します。使用するとエラーが返されます
これはストアド プロシージャです:
#shares テーブル内のデータをクエリします
#call proc_show_shares('sendtime'); // オブジェクトを並べ替えます
区切り文字 //
DROP PROCEDURE IF EXISTS proc_show_shares //
CREATE PROCEDURE proc_show_shares (sorttype varchar(15) 内)
BEGIN
Set @sql = concat("select* from share order by ", sorttype," desc");
PREPARE cmd from @sql
DEALLOCATEPREPARE cmd; ;
END//
区切り文字;
以下のコードは正常に実行されます:
$query = "call proc_show_shares('sendtime')" //ストアド プロシージャを呼び出します
while($ result_row = mysql_fetch_row($results))
{
/ {コードセグメント}
$values [] = $ result_row;
}
注釈がキャンセルされた場合、その名前は間違っています。 users where id = 10001") または die('damn');
上記の SQL ステートメントは通常単独で実行されます (もちろん結果が表示されます) が、一緒に接続すると 'damn' が出力されます。
なぜですか?
値を出力できますただし、 mysql_query("select name from users where id = 10001") または die('depend'); を追加しても機能しません
データベースはすべてのプロセス中に常に接続されます。ディスカッション (解決策) へ
これは、ストアド プロシージャによって返されるデータ構造が通常のクエリのデータ構造とは異なるという事実に関連していますが、ストアド プロシージャを実行するとリソースの配列が返されます。正確ではありませんが、重要なのはここからです)
単純な変数と配列変数を処理するのに同じメソッドを使用できないのと同じように、異なる結果セットを処理するためにも異なるメソッドを使用する必要があります
しかし、php のデータベース操作関数はこれを行いません。この問題はあなたが遭遇します (もちろんあなただけではありません)
解決策は簡単です: 最初に空の結果セットを読み取り、それから他のクエリを実行します
これには理由があります: ストアド プロシージャを使用しているため、引き続きクエリを実行する必要があります他のクエリもストアド プロシージャに入れる必要があります
カテゴリ内で彼によって処理されるべきではありません
mysql_query("select name from users where id = 10001") このクエリは最初から呼び出すストアド プロシージャに置かれています。しかし読み込めなかったので、ストアドプロシージャの使用を諦めてSQL文を直接使用しましたが、結果はやはり動作しませんでした。最初のストアド プロシージャの呼び出しが後続のクエリに大きな影響を与えるようです。前のストアド プロシージャが SQL ステートメントに変更されている限り、すべてが正常になります。 - ----------
さらに、mysql では、トリガー、ストアド プロシージャ、SQL ステートメントを継続的に (再帰なしで) 呼び出すことができます。