-1

ストアドプロシージャを使用してPHPでレポートを作成するにはどうすればよいですか?私が検索したものに基づいて、ストアドプロシージャはmysqlではなくmysqliを使用します。だから私はこれが可能かどうか混乱しています。これを実装する方法の例を教えてください。

4

1 に答える 1

2

MySQLでストアドプロシージャを呼び出したい場合は、両方mysqlmysqliそれを行うことができます。とはいえ、それでも良いのでお勧めmysqliします(したがって、i;'改善された';と思います)。

PHPで他のSQLステートメントを呼び出すのと同じように、ストアドプロシージャを呼び出します。

mysqli_query($link, "CALL Procedure('$strVar', $intVar, etc.)");

私の例ではmysqli_querymysql_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からそれらを呼び出すための特別な魔法は必要ありません。

于 2013-03-09T12:28:45.363 に答える