0

程序

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 都可以工作。

我在这里错过了什么?谢谢!

4

2 回答 2

0

您确定正在创建程序吗?MySQL Workbench 和 phpMyAdmin 都告诉我 select * from table 中有语法错误;--- 可能是因为 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 失败(当然,无论是否更改过程)

于 2012-07-22T00:53:41.417 回答
0

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

编辑:

这是执行此操作的 SQL:

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

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

于 2012-07-22T01:03:34.543 回答