2017-01-12 8 views
0

実行したい100 Update/Delete PHPで作成され、MySQLストアドプロシージャに送信される動的クエリ。MySQLの複数の動的クエリ

現在、私は

CREATE PROCEDURE `updateBill`(IN `queryIs` VARCHAR(10000)) 
BEGIN 
    SET @t1 = queryIs; 
    PREPARE stmt3 FROM @t1; 
    EXECUTE stmt3; 
    DEALLOCATE PREPARE stmt3; 
END 

のように、このコードでストアドプロシージャで、単一の動的なクエリを実行することができます。しかし、これは;で終了し、単一のクエリを実行することができます。しかし、私は、約100動的照会を持っており、

update abc set a=1, b=0 where c=5; 
update abc set a=7, b=3 where c=6; 
delete from abc where c = 3; 
update abc set a=9, b=2 where c=8; 
update abc set a=2, b=1 where c=12; 
delete from abc where c = 10; 

上記のクエリのすべてのようにそれらを実行したいPHPは、クライアントのデータから送信されたデータを作られています。私はすぐにサーバーとの接続を作成し、上記のクエリを1つずつ実行したくないですが、私はちょうどストアドプロシージャのパラメータで単一の文字列として上記のクエリを送信し、それから動的クエリを作成し、上記のすべてを実行します。

+0

もちろん、パラメータをたとえば';'(または長さを含む2番目のパラメータを追加すると、 '; ''を含む文字列と実際の区切り文字を区別しやすくなります)、ループでそれらを実行しやすくなります。一方、そうする理由はまったくありません。ちょうど接続を開き、phpから問い合わせを一つずつ(または準備して)実行してください。実際には動的SQLを使用するよりも速く、より多くのことができますし、それ以外の場合はまったく同じことができます。 (それがあなたのやり方でそれを最適化できるなら、既に実装されているでしょう)。 – Solarflare

+0

また、PHPで複数のクエリを使用することもできます。一度に送信したい場合は、ストアドプロシージャではなく、文字列全体を1つのクエリ呼び出しで呼び出します。それは速くはありませんが、あなたのために簡単になるかもしれません(あなたの考えの背後にある理由は正確にはわかりません)。 – Solarflare

答えて

0

あなたの意図が であることは本当に100%明確ではありませんでしたが、すべての可能性のあるケースを予測したい場合は、あなたの手続きでストリング処理を行う必要があるようです。

関連する問題