Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Вызов
total_list('00052','01'); // Это вызов отрабатывает
total_list('00052','06'); // Здесь выдает ошибку ( Warning: mysql_fetch_array() expects parameter 1 to be resource),
что обычно означает ошибку в SQL запросе .
На деле получатеся два вызова хранимой процедуры подряд
call money_get_contragents_with_saldo('00052','01')
call money_get_contragents_with_saldo('00052','06')
Код php функции
function total_list($manager_id,$ed)
{
global $link,$smarty ;
$sql="call money_get_contragents_with_saldo('".$manager_id."','".$ed."')";
print $sql. "<br>";
$r=mysql_query($sql,$link);
print "количество строк в запросе:" . mysql_num_rows($r) . "<br>";
$rows=array();
while ($f=mysql_fetch_array($r))
{
$rows[]=$f;
$smarty->assign('income', $rows);
}
$smarty->assign('manager', $manager_id);
$smarty->display('Money/total_list.tpl');
}
------------------------------
Вот код процедуры.
CREATE DEFINER=`office`@`localhost` PROCEDURE `money_get_contragents_with_saldo`(IN manager varchar(5), IN edition varchar(2))
BEGIN
CREATE temporary TABLE saldo_tmp
(summa double(13,2) NOT NULL,
contragent_id varchar(6) NOT NULL ,
manager_id varchar(5) NOT NULL);
IF edition = '01' THEN
insert into saldo_tmp select * from 01_view_6201_debet ;
insert into saldo_tmp select * from 01_view_6201_kredit ;
select ur_name,sum(summa),contragent_id,manager_id from saldo_tmp
join contragents on saldo_tmp.contragent_id = contragents.id
where manager_id =(manager) group by contragent_id ;
END IF;
IF edition = '06' THEN
insert into saldo_tmp select * from 06_view_6201_debet ;
insert into saldo_tmp select * from 06_view_6201_kredit ;
select ur_name,sum(summa),contragent_id,manager_id from saldo_tmp
join contragents on saldo_tmp.contragent_id = contragents.id
where manager_id =(manager) group by contragent_id ;
END IF;
DROP TABLE saldo_tmp;
END
Неактивен
$r=mysql_query($sql,$link);
print "количество строк в запросе:" . mysql_num_rows($r) . "<br>";
Между этими двумя строчками вставьте print (mysql_error($link));
Неактивен
Выдал:
Commands out of sync; you can't run this command now
Сижу читаю , как с этим бороться .
Неактивен
Похоже вы не забираете все наборы данных которые возвращает процедура.
Неактивен
Нашел описание , как освободить набор данных , но для Mysqli.
Но я ее не использую . Как быть пока не соображу .
Неактивен
Правильно использовать mysqli, старый интерфейс вообще очень плохо работает
с хранимыми процедурами. Ну или нужно аккуратно следить, чтобы процедура не
возвращала больше одного результата.
Неактивен
Вот мне и не понятно , вроде у меня всего один select . Что еще за результат может вернуть процедура?
Неактивен
Ну, я так сходу тоже не вижу несколько селектов. Тем не менее, если Вы выполните
эту процедуру в клиенте MySQL, Вы получите пять кодов ошибок (создание временной
таблицы, вставка х2, собственно выборка, и удаление таблицы). Подозреваю, что
нужно забрать каждую из чиселок, а не только первую.
Неактивен
Я, конечно, несовсем своевременно, но столкнулся с аналогичной проблемой.
Загвоздка состоит в том, что процедуры, возвращающие результатом таблицу, возвращают помимо нее и второй результат - булеву переменную относительно успешности/неуспешности запроса. Пока вы ее не "вытащите", дело дальше не пойдет.
В программе-клиенте (у меня php) нужно написать что-то вроде этого:
Неактивен
Тоже столкнулся с этой проблемой,а куда именно вставлять этот код? Перед вызовом процедуры или после? я поставил в середину между 1 и 2 процедурой вроде бы работает, хотелось только уточнить правильно ли я сделал
Отредактированно simple (05.05.2011 01:01:00)
Неактивен
Ааа! Март! 2010!
Если работает, значит, правильно.
Неактивен
Страниц: 1