程序
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都可以工作。
我在这里想念什么?谢谢!
答案 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特权才能实际调用该过程。)