[英]How to call MySQL stored procedure by using prepared statements in PHP via mysqli?
[英]Why can't I call a MySQL stored function in a prepared query via PHP?
我在准備好的語句中有以下查詢:
SELECT
cid, cname, cemail, count_client_locations(cid) AS loc_cnt
FROM
clients
WHERE isactive = 1 ORDER BY cname ASC
我在服務器count_client_locations
上有一個存儲函數。 該函數的查詢部分如下所示:
RETURN (SELECT COUNT(lid) FROM locations WHERE linked_client = cid);
當我在 MySQL Workbench 中運行 SQL 時,它返回所需的結果:
cid | cname | cemail | loc_cnt
------------------------------------------------
2 | Acme Inc | fred@example.com | 3
1 | Example Ind | alice@example.com | 5
3 | Foobar Inc | joe@example.com | 0
1 | Barfoo Ltd | hello@example.com | 1
當我通過 PHP mysqli 准備好的語句運行它時,它無法准備它( Fatal error: Call to a member function execute() on a non-object
)。 如果我取出對該函數的調用,它就可以正常工作。
編輯 PHP 代碼:
$sql = $conn->prepare("SELECT cid, cname, cemail, count_client_locations(cid) AS loc_cnt FROM clients WHERE isactive = 1 ORDER BY cname ASC");
$sql->execute();
那么為什么這個查詢在 MySQL 工作台中工作,而不是在 PHP 代碼中工作,我可以做些什么來修復它?
您收到錯誤消息Fatal error: Call to a member function execute() on a non-object
。
需要說明的是,這是一條 PHP 錯誤消息,而不是 MySQL 錯誤消息。 該錯誤與您的查詢字符串或您的數據庫完全無關。
您的代碼如下所示: $conn->prepare(...)
。
發生錯誤是因為 PHP 無法識別$conn
變量。 您可能認為$conn
是 MySQL 連接對象,但 PHP 在調用$conn
時正在查看它並看到null
(或可能為false
或其他一些非對象值)。 這就是它給出此錯誤的原因。
你沒有向我們展示足夠的代碼來解釋為什么它會這樣做; 可能您在一個函數中並且沒有將$conn
傳遞給它,但還有其他可能的原因。 因為我不能確定,我會讓你從那里開始解決。
所以,回答我自己的問題,為什么查詢在 MySQL Workbench 中而不是在 PHP 代碼中工作是因為我沒有指定存儲函數調用的數據庫:
SELECT
cid, cname, cemail, DBName.count_client_locations(cid) AS loc_cnt
FROM
clients
WHERE isactive = 1 ORDER BY cname ASC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.