我计划使用PHP和MySQL开发一个内容管理系统,它利用MySQL存储过程对我的MySQL数据库执行预准备语句查询。我用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 ;然后是我的两个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/
有人知道我在这里做错了什么吗?为什么这个存储过程的返回参数没有显示在屏幕上?
发布于 2013-01-28 05:44:50
首先,您参考了关于PDO的教程,但您使用的是Mysqli。
第二步:转换:
$result = $dbConnection->query( 'CALL get_user($id,$return)');to (请注意双引号和@return``):
$result = $dbConnection->query( "CALL get_user({$id},@return)");然后,稍后,执行以下操作:
$result = $dbConnection->query( 'SELECT @return');如果SP是SELECT,那么您可以在自己编写的情况下执行此操作。
原因是,SP不会向PHP返回任何内容,它会将值返回到MySQL变量(@return)中(scop在MySQL中),因此您需要在一个单独的调用中查询此变量。如果它是对一个简单的select SP的调用,那么它将像任何其他select语句一样返回值。
https://stackoverflow.com/questions/14552601
复制相似问题