私は、MySQL Workbenchで作られた多くのストアドプロシージャを持っています。 MySQL Workbenchを使用してテストDBに入れてもうまく動作します。PHPからMySQLにストアドプロシージャを挿入/作成するには?
私は配備用のDB作成スクリプトを準備していますが、これが私に問題を起こす唯一のものです。コマンドライン/ mysqlシェルを使用すると、スクリプトは完全にうまく動作します。 PHP mysql(i)インターフェースを使用してスクリプトを実行する場合のみです。失敗します。コメントなし。
MySQL Workbenchが私のために生成するように、プロシージャ作成スクリプトを使用します。手順はここ
;
END$$
DELIMITER ;
このスクリプトを行く...
DELIMITER $$
USE `dbname`$$
CREATE PROCEDURE `procname`(IN inputparameters)
BEGIN
:各手順について繰り返し、スクリプトの開始時に
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL';
:それはそれは、このパターンを持っている、ですMySQL Workbenchから実行するとうまく動作します。私はmysqlコマンドラインから同じものを試してもうまく動作します。しかし、PHPのmysqliインターフェース(mysqli_multi_queryを使って実行すると、他のスクリプトでDBを作成して移植するのに問題ありません)を通して実行すると、何も達成できません。インターフェイスにエラーは返されず、結果(!)はありません。 私が得るのは「偽」です。それだけです。エラーコードは0で、エラーメッセージはありません。
私にとっては大きなWTFだし、正しい方向に向けることができれば幸いです。これを修正してPHPからプロシージャをインストールするにはどうしたらいいですか?
PS:root/adminアクセスが与えられ、検証されました(結局、私はまったく同じ接続、作成されたユーザー、挿入されたテーブルなどでDBを作成しました)。
「dbname」の使用を削除してみます。また、mysqli_queryコマンドを使用している場合は実行してみてください。 – Knubo
USEステートメントを削除しましたが効果はありません。 mysqli_queryも失敗します。この場合、文字列には複数のステートメントが含まれているため、*が正しく実行されていれば、複数の結果が返されます(mysqli_queryは処理しません)。 - 他のスクリプトの場合、mysqli_multi_queryは完全に正常に動作し、各ステートメントに対して1つの結果行を返します。 (成功時は空行、注意:SHOW WARNINGSへの反応として1051行、すべて期待どおり)。 – foo
私は近づいています - 解決策はありませんが、診断です。 DELIMITERはクライアントサイドで実装されているようです(!)。 – foo