ストアドプロシージャを使用してPHPでレポートを作成するにはどうすればよいですか?私が検索したものに基づいて、ストアドプロシージャはmysqlではなくmysqliを使用します。だから私はこれが可能かどうか混乱しています。これを実装する方法の例を教えてください。
1 に答える
MySQLでストアドプロシージャを呼び出したい場合は、両方mysql
とmysqli
それを行うことができます。とはいえ、それでも良いのでお勧めmysqli
します(したがって、i
;'改善された';と思います)。
PHPで他のSQLステートメントを呼び出すのと同じように、ストアドプロシージャを呼び出します。
mysqli_query($link, "CALL Procedure('$strVar', $intVar, etc.)");
私の例ではmysqli_query
、mysql_query
を使用していますが、同様に機能します。
PHPはそのオブジェクトにmulti_query()
関数を持っていますが、区切り文字としてのみ許可されているため、PHP内からストアドプロシージャを作成することはできません。ストアドプロシージャ内で必要になるため、これは悪いことですが、PHPはそれらを個別のクエリとして実行します。mysqli
;
例としてのMySQLのストアドプロシージャ:
DELIMITER $$
DROP PROCEDURE IF EXISTS `Procedure`$$
CREATE PROCEDURE `Procedure` (
IN `userid` INT
)
IF EXISTS (SELECT 1
FROM `users`
WHERE `user_id` = `userid`)
THEN
SELECT `user_name`
FROM `users`
WHERE `user_id` = `userid`;
ELSE
SELECT `user_name` = 'No such user';
END IF;
END $$
ストアドプロシージャ内で使用されるため(プロシージャは多数のクエリであり、そのような区切り文字で区切る必要があるため)、区切り文字の名前を変更する必要があることに注意してください(標準の区切り文字は;
)。 $$
区切り文字の通常推奨される名前変更です。
PHP内からを使用してこのSQLを実行すると、クエリが5つのクエリmulti_query()
に分割され、;
すべて構文エラーが発生します(フラグメントであるため)。
したがって、ストアドプロシージャを作成するには、目的に応じて.sqlスクリプトを記述します。次に、ターミナルからスクリプトを実行します。
$ mysql --user="$USER" --password="$PASSWORD" $DB < $FILE
MySQLのストアドプロシージャについて詳しく知りたい場合は、Webを検索することをお勧めします。優れたチュートリアルがたくさんあります。ただし、通常のSQLステートメントと比較して、PHPからそれらを呼び出すための特別な魔法は必要ありません。