Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Проблема с запросами после вызова процедуры


Автор: LordZeus 1.11.2011, 17:35
Доброго времени суток!

Проблема вот в чем: написал процедуру, и при ее вызове - она выполняется нормально, но все последующие запросы возвращают:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\juli...

Если вернуть просто запрос, вместо вызова процедуры - все нормально.

Код вызова: 
Код

$query='CALL `sizes_on_tgood_id`('.$good.');';
$res_size=mysql_query($query, $con_base);
$row_size=mysql_fetch_array($res_size);


Код хранимой процедуры:
Код

CREATE DEFINER = 'root'@'localhost' PROCEDURE `sizes_on_tgood_id`(
        IN income INTEGER(11)
    )
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN

set @REZ:= (select `t_goods`.`type_good` FROM `t_goods` where `t_goods`.`id`=income);
set @REZ2:= (select `t_goods`.`color` FROM `t_goods` where `t_goods`.`id`=income);

set @result:=CONCAT("
select `sizes`.`size`,
`good_size_koll`.`id` 
from `sizes`,`good_size_koll`, `t_goods` 
where `sizes`.`id` = `good_size_koll`.`id_size` 
and `good_size_koll`.`nal` = 1 
and `good_size_koll`.`id_good` = `t_goods`.`id` 
and `t_goods`.`type_good` = ",@REZ," 
and `t_goods`.`color` = ",@REZ2);

PREPARE stmt FROM @result;
EXECUTE stmt;

END;


В чем проблема - пока не разобрался, но надеюсь, что местные гуру легко и просто мне помогут!  smile 

Автор: skyboy 1.11.2011, 22:44
не знаю, насколько актуально, но в http://ua.php.net/manual/en/function.mysql-query.php#82429 было про ошибку при запуске хранимых процедур.
в любом случае, должна было помочь http://php.net/mysql_error. хотя бы в виде
Код

$query='CALL `sizes_on_tgood_id`('.$good.');';
if (!$res_size=mysql_query($query, $con_base)) {
 die(mysql_error());
}

помочь выяснить причину сбоя, я имею в виду

Автор: LordZeus 1.11.2011, 23:04
skyboy,  Спасибо, добрый человек. Совет дал первые результаты:

Ошибка:
Commands out of sync; you can't run this command now

Ищу способ решения.

Только вот этот метод выявления ошибки я применил ровно к следующему за вызовом обращению к БД. 

Получается, что моя процедура, как бы, не завершает работу до конца и препятствует выполнению других запросов какое-то время.

Это логично, т.к. после скрипта который запускает процедуру если перейти по другим ссылкам на сайте (без вызовы процедуры) ни один запрос к БД не выполняется и выводится куча ошибок указанных в первом сообщении. Спусти 10-20секунд все снова работает. smile 

Автор: LordZeus 1.11.2011, 23:39
Короче, может кому пригодится, но я нашел ответ на этот вопрос, правда еще не сообразил как его применить относительно моей задачи, но тем не менее поделюсь ссылкой:

http://habrahabr.ru/blogs/webdev/21326/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)