PHPとMySQLを使用して、MySQLストアドプロシージャを利用してMySQLデータベースに対してプリペアドステートメントクエリを実行するCMSを開発することを計画しています。PHPで開発してから(手続きの時代に)長い時間が経ちましたので、PHPの新しいOOP構造を使用してこのシステムを実装してみます。その前に、MySQLストアドプロシージャの出力パラメータを単純なphpページに戻すという単純な問題を理解する必要があります。これは単なるテストであり、最初のphpクラスを開発する前に構文を正しく取得できるため、ここに投稿された最初のコードは手続き型です。
まず、ストアドプロシージャがあります。
DELIMITER $$
DROP PROCEDURE IF EXISTS `text_development`.`get_user`$$
CREATE PROCEDURE `text_development`.`get_user`
(
IN userId INT,
OUT user_name VARCHAR(100)
)
BEGIN
SELECT username
INTO user_name
FROM user
WHERE user_id = userId;
END $$
DELIMITER ;
次に、2つのphpファイルがあります。
<?php
//db_config.php
$mysqli_host = "localhost";
$mysqli_user = "root"; //I'm not stupid enough to use this in development
$mysqli_pass = "root"; //before anyone comments about the root usage
$mysqli_db = "text_development";
?>
<?php
//index.php
require('incl/db_config.php');
$dbConnection = new Mysqli($mysqli_host, $mysqli_user, $mysqli_pass, $mysqli_db) or die(mysql_error());
print '<h1>Stored Procedure Retrieval Test</h1>';
$id = 1;
$return = '';
$result = $dbConnection->query( 'CALL get_user($id,$return)');
print $result;
?>
私の問題はindex.phpページで発生します。実際には何も返さないようです。PHPMyAdminでストアドプロシージャを実行すると、ユーザーID 1を渡すとユーザー名テストが返されますが、phpで関数を呼び出すと画面に何も返されません。$ returnも出力しようとしましたが、これは空の文字列を返します(上記のコードで定義したとおり)。このオンラインチュートリアルを使用してみましたが、そこでの解決策は機能していないようです:
http://www.joeyrivera.com/2009/using-mysql-stored-procedures-with-php-mysqlmysqlipdo/
ここで私が間違っていることと、このストアドプロシージャの戻りパラメータが画面に出力されない理由を誰かが知っていますか?