假設我今天寫了個 procedure 叫 test()
delimiter $$
drop procedure if exists test||
create procedure test()
begin
select * from table;
end
$$
delimiter ;
我知道在 php 呼叫的方式是
$query = mysql_query('call test()');
但我想要的是這個結果就像我下 query 一樣讓我可以 fetch
$sql = "select * from table";
$query = mysql_query($sql);
$row = mysql_fetch_assoc
while(.....
請問該怎麼做呢?
//就照原本的方式 fetch 出資料
$sql = "call test()";
$query = mysql_query($sql);
$row = mysql_fetch_assoc($query);
while(.....
請在 $query = mysql_query($sql); 下面插一行
if (mysql_errno()) die(mysql_error());
把錯誤印出來看看吧 (如果有錯的話)
因為 supplied argument is not a valid MySQL result resource 這種訊息通常是 SQL 或 procedure 根本就寫錯了。
PROCEDURE test.test can't return a result set in the given context
在網路找到這篇解答,call procedure 返回值這麼麻煩喔
http://hi.baidu.com/zhujinyu/blog/item/231b6fa9e21126f11e17a2c0.html
就把
$sql = "select * from table";
換成
$sql = "call test()";
就這樣。
不過假如你有多個 procedure 要連續 call,請在 query 下一個 procedure 前,先下一個 next_result(),以免出現 "Commands out of sync; you can't run this command now" 錯誤。
另外,建議使用 mysqli 系列指令,不要再用 mysql 系列了。