2009-04-09 75 views
3

我有下面的存儲過程來檢查用戶名的可用性MySQL的存儲過程:不能從PHP代碼運行

DELIMITER $$; 

DROP PROCEDURE IF EXISTS tv_check_email$$ 

CREATE PROCEDURE tv_check_email (IN username varchar(50)) 
BEGIN 
    select USER_ID from tv_user_master where EMAIL=username; 
END$$ 

DELIMITER ;$$ 

當我運行這個從我的MySQL前端工具,它的作品就好了:

call tv_check_email('[email protected]') 

但試圖從PHP頁面執行時,我得到這樣

"PROCEDURE mydatabase.tv_check_email can't return a result set in the given context" 

我是蘇錯誤重新說我的PHP版本是5.2.6。

回答

3

科迪是不是100%正確。您可以綁定您的結果返回列,並從存儲過程中返回選擇數據。

$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

$stmt = $mysqli->prepare("call tv_check_email(?)"); 
$stmt->bind_param('s', "[email protected]"); 
$stmt->execute(); 

$stmt->bind_result($userid); 

while ($stmt->fetch()) { 
    printf("User ID: %d\n", $userid); 
} 

$stmt->close(); 
$mysqli->close(); 
+1

啊,是的,好多了。從我的理解,標準。 mysql擴展不支持訪問OUT的結果集,但是mysqli會(如你的代碼所示)?很高興知道。 – 2009-04-10 05:51:46

3

您需要將結果綁定到OUT參數中。

查看MySQL的文檔stored procedures

mysql> delimiter // 

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT) 
    -> BEGIN 
    -> SELECT COUNT(*) INTO param1 FROM t; 
    -> END; 
    -> // 
Query OK, 0 rows affected (0.00 sec) 

mysql> delimiter ; 

mysql> CALL simpleproc(@a); 
Query OK, 0 rows affected (0.00 sec) 

mysql> SELECT @a; 
+------+ 
| @a | 
+------+ 
| 3 | 

+ ------ +

+0

感謝科迪,它的工作 – Shyju 2009-04-09 06:21:35