Ошибка вызов хранимой процедуры из PHP

Rifle

Новичок
Ошибка вызов хранимой процедуры из PHP

Есть хранимая процедура, которая формирует динамический запрос из входящих параметров.
Напрямую в MySQL отрабатывает без проблем, при попытке вызвать ее через

$result = mysql_query("call set_num_category($category_id)")
or die("Invalid query: " . mysql_error());

выдает ошибку Invalid query: PROCEDURE sut.set_num_category can't return a result set in the given context

Может есть какая-то особенность вызова, кто-то сталкивался?

-~{}~ 15.05.08 15:28:

причем если процедуру переписать чтоб она работала в статическом режиме, все отрабатывает правильно....

-~{}~ 16.05.08 20:04:

А вообще, кто-то делает так и пользуется динамическими запросами в MySQL stored procedure?
 

Gas

может по одной?
http://forums.mysql.com/read.php?52,59458,59458

пишут что mysqli нужно, pdo наверное тоже подойдёт.
была и у меня такая проблема, кажется решилось всё использованием mysqli, но могу и соврать.

Андрейка
динамический запрос - это запрос, который ты составляешь конкатенацией или ещё как, а не через PREPARE с плейсхолдерами.
 

berkut

Новичок
динамический - это наверное процедура, возвращающая резалт

-~{}~ 16.05.08 21:47:

мля, одни эксперты))
 

Rifle

Новичок
Я понимаю под динамическим тот, который формируется из входных параметров процедуры.

Например так:
CREATE DEFINER=`root`@`localhost` PROCEDURE `set_num_dynamic`(IN _tab varchar(30), _id int)
BEGIN
SET @myq = CONCAT("UPDATE ",_tab," set num = ",_id," WHERE category_id = ",_id);
PREPARE myquery FROM @myq;
EXECUTE myquery;
DEALLOCATE PREPARE myquery;
END$$

Gas спасибо, буду пробовать mysqli
 

Gas

может по одной?
SQL prepared statements (PREPARE, EXECUTE, DEALLOCATE PREPARE). Implication: You cannot use dynamic SQL within stored routines (where you construct dynamically statements as strings and then execute them). This restriction is lifted as of MySQL 5.0.13 for stored procedures; it still applies to stored functions and triggers.
http://dev.mysql.com/doc/refman/5.0/en/routine-restrictions.html

тут под динамикой тоже понимается - http://phpclub.ru/talk/showthread.php?s=&threadid=75720&highlight=execute
 

Rifle

Новичок
Gas Огромное спасибо, с mysqli все отрабатывает безоговорочно!!!

Вы еще упоминали "pdo", я про него тоже где-то слышал уже, у него есть какие-то преимущества по сравнению с mysqli?
 

Rifle

Новичок
Мой хостер к сожалению не поддерживает это :(
Так что будем довольствоваться mysqli
 

Alexandre

PHPПенсионер
Вы еще упоминали "pdo", я про него тоже где-то слышал уже, у него есть какие-то преимущества по сравнению с mysqli?
PDO лучше работает с процедурами, особенно если там есть темпоральные таблицы.
 

Mols

Новичок
Alexandre
Можно подробнее? Что значит лучше?
Я пользуюсь несложным самописным классом на основе mysqli и никаких проблем с процедурами и временными таблицами вроде нет.
 
Сверху