簡體   English   中英

MySQL存儲過程:無法從PHP代碼運行

[英]MySQL stored procedure: can't run from PHP code

我有以下存儲過程來檢查用戶名可用性

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('shyju@techies.com')

但是當試圖從PHP頁面執行時,我得到一個錯誤

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

我確信我的PHP版本是5.2.6。

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

請參閱存儲過程的mysql文檔

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    |

+ ------ +

看起來如果使用mysqli PHP庫,您實際上可以檢索結果集,而無需使用OUT變量和另一個查詢來檢索您的值。 本文介紹了詳細信息:

http://amountaintop.com/php-5-and-mysql-5-stored-procedures-error-and-solution-qcodo

科迪並非100%正確。 您可以綁定生成的返回列並從存儲過程中返回選擇數據。

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

$stmt = $mysqli->prepare("call tv_check_email(?)");
$stmt->bind_param('s', "shyju@techies.com");
$stmt->execute();

$stmt->bind_result($userid);

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM