为什么这个存储过程不起作用?

时间:2013-05-14 20:30:19

标签: php mysql stored-procedures

似乎没有问题,我无法理解为什么不返回数据。

这是我的存储过程:

DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`get_products`$$
CREATE PROCEDURE  `test`.`get_products`
(
    OUT out_productName VARCHAR(255)
)
BEGIN
SELECT productName INTO out_productName FROM products;
END $$
DELIMITER ;

这就是我所说的:

$rs = mysql_query( 'CALL get_products(@f)' );
$rs = mysql_query( 'SELECT @f' );
while($row = mysql_fetch_assoc($rs))
{
print_r($row);
}

2 个答案:

答案 0 :(得分:0)

尝试:

DELIMITER $$
DROP PROCEDURE IF EXISTS test.get_products;
CREATE PROCEDURE  test.get_products()
BEGIN
SELECT productName FROM products;
END $$
DELIMITER ;

并称之为:

$rs = mysql_query( 'CALL test.get_products()' );
while($row = mysql_fetch_assoc($rs))
{
    print_r($row);
}

答案 1 :(得分:0)

这不能完全回答你的问题,但解决方法是不使用输出参数

DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`get_products`$$
CREATE PROCEDURE  `test`.`get_products`
(

)
BEGIN
SELECT productName INTO @f FROM products;
END $$
DELIMITER ;


 mysql_query( 'set @f = 0;' );
$rs = mysql_query( 'CALL get_products()' );
$rs = mysql_query( 'SELECT @f' );
while($row = mysql_fetch_assoc($rs))
{
print_r($row);
}

@f将由数据库维护,如果我没记错的话,可以访问sql会话

如果您在从存储过程中获取结果时返回内容,您也可以使用

$rs->close();
 $connection->next_result();

连接将是您为连接字符串命名的任何内容