|
|
|
| У меня вопрос к господам М Кузнецову и И. Симдянову.
Я приобрёл две Ваших книги:
1.Самоучитель MySQL 5.
2.MySQL на примерах.
Цель приобретения Ваших трудов - постигнуть и внедрить в свою работу - хранимые процедуры.
Результат - в командной строке я легко пишу процедуру, ложу её в базу и, собственно, без труда вызываю.
Перехожу к практической стороне вопроса. На index - ной странице есть такой запрос:
$r = mysql_query("SELECT * FROM categories WHERE cat='01' ORDER BY nuw",$db);
|
я вместо него ставлю
$r =mysql_query("CALL aaa()");
| , где aaa - имя процедуры, тело которой - содержание первого кода.
Моя вставка работает отлично, выводится в цикле массив - просто на загляденье, но вот беда - на index - ной странице ещё девять запросов и они почему-то, после вставки процедуры, перестали выполняться. Причина, на мой взгляд в том, что в одну процедуру нужно разместитить все запросы файла.
(Цитирую Ваш труд - "Часто при выполнении рутинных операций требуется производить последовательность одинаковых запросов. Хранимые процедуры позволяют объединить последовательность таких запросов и сохранить их на сервере. После этого клиентам не придётся посылать серверу последовательность запросов, достаточно послать один запрос на выполнение хранимой процедуры")
Я в Вашей книге не найду ответа на вопрос: А КАК ЖЕ ЭТО СДЕЛАТЬ?? | |
|
|
|
|
|
|
|
для: averkov
(28.09.2010 в 16:59)
| | $r = mysql_query("SELECT * FROM categories WHERE cat='01' ORDER BY nuw",$db);
вернёт грубо говоря набор данных в виде таблицы
$r =mysql_query("CALL aaa()");
выполнит процедуру ничего не возвращая, если нет out параметров в процедуре
в чём вопрос я не понял? что нужно сделать? | |
|
|
|
|
|
|
|
для: ronin80
(29.09.2010 в 14:12)
| | Вы, видимо, невнимательно прочли текст.
Процедура выполняется и без параметров - никаких проблем, но ... "на index - ной странице ещё девять запросов и они почему-то, после вставки процедуры, перестали выполняться."
Вместо одного запроса $r ... написал и вставил запрос в виде хранимой процедуры, но остальные запросы (9 шт.) вообще перестали выполняться. Почему? | |
|
|
|
|
|
|
|
для: averkov
(30.09.2010 в 11:14)
| | ну тогда приведите что ли листинг процедуры
а обработка ошибок стоит в теле процедуры? может на каком то этапе в процедуре ошибка происходит? | |
|
|
|
|
|
|
|
для: ronin80
(30.09.2010 в 11:42)
| | Причём здесь всё это?
Сама процедура
$r =mysql_query("CALL aaa()");
выполняется нормально, всё из неё выводится в браузер, но остальные 9 SQL-запросов, которые до вставки в код
$r =mysql_query("CALL aaa()");
выполнялись нормально, не выполняются!
Я думаю, что все запросы файла (а их всего 10) нужно помещать в процедуру, но как их потом разделить? | |
|
|
|
|
|
|
|
для: averkov
(30.09.2010 в 15:23)
| | здесь волшебников нет, приведите код пхп и листинг процедуры | |
|
|
|
|
|
|
|
для: ronin80
(30.09.2010 в 15:34)
| | Код Вы уже читали, тело процедуры - есть, а листинг какой Вам нужен - создания процедуры? | |
|
|
|
|
|
|
|
для: averkov
(30.09.2010 в 18:57)
| | Как вы узнали, что они не выполняются?
Может, у вас там при вызове хранимой процедуры возникает fatal error, скрипт просто прекращает работу, а у вас выключен вывод ошибок?
и у вас просят код всего файла index, как вы выразились, а не одной строчки. | |
|
|
|
|
|
|
|
для: neadekvat
(30.09.2010 в 21:26)
| | Интерпретатор пишет:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in W:\home\localhost\www\jeu-7\blocks\lefttd_1.php on line 32
|
и это возникает после того, если я помещаю запрос на хранимую процедуру. | |
|
|
|
|
|
|
|
для: averkov
(01.10.2010 в 08:52)
| | Вы перевели?
Ожидается 1 параметр с типом "ресурс", вы передали булевое значение.
То есть ваш запрос mysql_query() возвращает не дескриптор, а false или true.
Соотстветственно, что-то не так с вашей хранимой процедурой. | |
|
|
|
|
|
|
|
для: neadekvat
(01.10.2010 в 12:45)
| | Я понял причину этого эффекта.
Хранимые процедуры записываются в базу mysql, и с этой базой происходит соединение, когда инициализируется запрос к хранимой процедуре.
Естественно, что на другие запросы не получу ответа - нет соединения. Я закрыл соединение после выполнения процедуры и открыл новое соединение перед выполнением остальных запросов и всё стало ОК. | |
|
|
|