2012-07-22 85 views
0

程序的mysqli不能調用存儲過程

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)返回布爾(假)。 但在MySQL中,查詢1和查詢2都起作用。

我在這裏錯過了什麼?謝謝!

回答

0

好吧,如果它不是語法,它可能是權限。您是否授予此數據庫的用戶執行權限?

編輯:

下面是做到這一點的SQL:

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

(即使用戶做存儲過程作爲單個查詢裏面的SQL所需的所有權限,你仍然需要EXECUTE特權來實際調用該過程。)

+0

不確定,我會研究它!感謝您的提示。編輯:它的作品!權限是這裏的問題:) – kalvin37 2012-07-22 01:07:28

+0

太棒了!即使在我可以添加細節之前,你已經掌握了它的工作原理:-) – 2012-07-22 01:13:57

0

您確定正在創建過程嗎? MySQL Workbench和phpMyAdmin都告訴我select * from表中有一個語法錯誤; ---可能是因爲表格是保留字?這工作在MySQL工作臺:

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

DELIMITER ; 

請注意添加反引號表。隨着我的系統上的變化,$ query2成功,但$ query1失敗(有或沒有對程序的改變當然)

+0

對不起,但表格只是這裏的一個別名。但在MySQL中,query1和query2都可以工作。 – kalvin37 2012-07-22 00:55:25

+0

我剛回去並添加了DETERMINISTIC關鍵字;仍然有效。 – 2012-07-22 00:56:07