簡體   English   中英

為什么我不能通過 PHP 在准備好的查詢中調用 MySQL 存儲函數?

[英]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.

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