PDO を使用して SP (ストアド プロシージャ) を呼び出そうとしています。
try {
// Connecting using the PDO object.
$conn = new PDO("mysql:host=$host; dbname=$dbname", $user, $password);
$stmt = $conn->prepare('CALL sp_user(?,?,@user_id,@product_id)');
$stmt->execute(array("demouser", "demoproduct"));
$result = $stmt->fetchAll();
print_r($result);
}
// Catching it if something went wrong.
catch(PDOException $e) {
echo "Error : ".$e->getMessage();
}
SP が正常に実行され、関連するテーブルにデータが挿入され、新しく挿入された ID が返されるとします。しかし、結果を印刷すると、空の配列が得られます。
なにか提案を?
以下は私が使用しているSPです。
DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`sp_user`$$
CREATE PROCEDURE `sp_user`(
IN user_name VARCHAR(255),
IN product_name VARCHAR(255),
OUT user_id INT(11),
OUT product_id INT(11)
)
BEGIN
START TRANSACTION;
INSERT INTO `user` (`name`) VALUES(user_name);
SET user_id := LAST_INSERT_ID();
INSERT INTO `product` (`name`) VALUES(product_name);
SET product_id := LAST_INSERT_ID();
INSERT INTO `map_user_product` (`user_id`,`product_id`) VALUES(user_id,product_id);
commit;
END$$
DELIMITER ;
編集:気にしないでください。
$result 変数を使用することで、OUT 変数の値を取得できると思いました。しかし後で、別の SQL クエリを使用してそれらの out 変数を取得する必要があることがわかりました。
$stmt = $conn->query("SELECT @user_id,@product_id");