mysqli无法调用存储过程

时间:2012-07-22 00:38:31

标签: mysqli procedure

程序

delimiter $$
drop procedure if exists db1.test;
create procedure db1.test()
deterministic
begin
    select * from table1;
end$$
delimiter ;

php代码:

$conn = new mysqli('localhost','username','passwd','db1');
$query1 = 'select * from table1';
$query2 = 'call test()';

然后$conn->query($query1)工作,$conn->query($query2)返回bool(false)。 但在mysql中,query1和query2都可以工作。

我在这里想念什么?谢谢!

2 个答案:

答案 0 :(得分:0)

您确定正在创建该程序吗? MySQL Workbench和phpMyAdmin都告诉我select * from table中存在语法错误; ---可能因为桌子是保留字?这在MySQL Workbench中有效:

USE `db1`;
DROP procedure IF EXISTS `test`;
DELIMITER $$
USE `db1`$$
CREATE PROCEDURE `db1`.`test` ()
BEGIN
    select * from `table`;
END
$$

DELIMITER ;

注意向表添加反引号。在我的系统上进行了这个更改,$ query2成功但$ query1失败(当然有或没有更改过程)

答案 1 :(得分:0)

好的,如果它不是语法,那么它可能是权限。您是否为此数据库授予用户执行权限?

编辑:

这是执行此操作的SQL:

GRANT EXECUTE ON `db1` . * TO 'user'@'localhost';

(即使用户具有在存储过程中作为单独查询执行SQL所需的所有权限,您仍然需要EXECUTE特权才能实际调用该过程。)