Почему я не могу вызвать хранимую функцию MySQL в подготовленном запросе через 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);

Когда я запускаю SQL в MySQL Workbench, он возвращает желаемый результат:

cid | cname       | cemail            | loc_cnt
------------------------------------------------
2   | Acme Inc    | [email protected]  | 3
1   | Example Ind | [email protected] | 5
3   | Foobar Inc  | [email protected]   | 0
1   | Barfoo Ltd  | [email protected] | 1

Когда я запускаю это через PHP подготовленный MySQL запрос, он не может подготовить его (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, и могу ли я что-нибудь сделать, чтобы это исправить?

-1

Решение

Вы получаете сообщение об ошибке 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 в это, но есть и другие возможные причины. Поскольку я не могу быть уверен, я оставлю вас, чтобы решить это оттуда.

0

Другие решения

Итак, ответ на мой собственный вопрос о том, почему запрос работал в MySQL Workbench, а не в коде PHP, заключается в том, что я не указывал, какая база данных для вызова хранимой функции:

SELECT
cid, cname, cemail, DBName.count_client_locations(cid) AS loc_cnt
FROM
clients
WHERE isactive = 1 ORDER BY cname ASC
0

По вопросам рекламы [email protected]