Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Хранимые процедуры
 
 автор: averkov   (28.09.2010 в 16:59)   письмо автору
 
 

У меня вопрос к господам М Кузнецову и И. Симдянову.
Я приобрёл две Ваших книги:
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 - ной странице ещё девять запросов и они почему-то, после вставки процедуры, перестали выполняться. Причина, на мой взгляд в том, что в одну процедуру нужно разместитить все запросы файла.

(Цитирую Ваш труд - "Часто при выполнении рутинных операций требуется производить последовательность одинаковых запросов. Хранимые процедуры позволяют объединить последовательность таких запросов и сохранить их на сервере. После этого клиентам не придётся посылать серверу последовательность запросов, достаточно послать один запрос на выполнение хранимой процедуры")

Я в Вашей книге не найду ответа на вопрос: А КАК ЖЕ ЭТО СДЕЛАТЬ??

  Ответить  
 
 автор: ronin80   (29.09.2010 в 14:12)   письмо автору
 
   для: 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 параметров в процедуре

в чём вопрос я не понял? что нужно сделать?

  Ответить  
 
 автор: averkov   (30.09.2010 в 11:14)   письмо автору
 
   для: ronin80   (29.09.2010 в 14:12)
 

Вы, видимо, невнимательно прочли текст.
Процедура выполняется и без параметров - никаких проблем, но ... "на index - ной странице ещё девять запросов и они почему-то, после вставки процедуры, перестали выполняться."

Вместо одного запроса $r ... написал и вставил запрос в виде хранимой процедуры, но остальные запросы (9 шт.) вообще перестали выполняться. Почему?

  Ответить  
 
 автор: ronin80   (30.09.2010 в 11:42)   письмо автору
 
   для: averkov   (30.09.2010 в 11:14)
 

ну тогда приведите что ли листинг процедуры

а обработка ошибок стоит в теле процедуры? может на каком то этапе в процедуре ошибка происходит?

  Ответить  
 
 автор: averkov   (30.09.2010 в 15:23)   письмо автору
 
   для: ronin80   (30.09.2010 в 11:42)
 

Причём здесь всё это?
Сама процедура
$r =mysql_query("CALL aaa()");
выполняется нормально, всё из неё выводится в браузер, но остальные 9 SQL-запросов, которые до вставки в код
$r =mysql_query("CALL aaa()");
выполнялись нормально, не выполняются!
Я думаю, что все запросы файла (а их всего 10) нужно помещать в процедуру, но как их потом разделить?

  Ответить  
 
 автор: ronin80   (30.09.2010 в 15:34)   письмо автору
 
   для: averkov   (30.09.2010 в 15:23)
 

здесь волшебников нет, приведите код пхп и листинг процедуры

  Ответить  
 
 автор: averkov   (30.09.2010 в 18:57)   письмо автору
 
   для: ronin80   (30.09.2010 в 15:34)
 

Код Вы уже читали, тело процедуры - есть, а листинг какой Вам нужен - создания процедуры?

  Ответить  
 
 автор: neadekvat   (30.09.2010 в 21:26)   письмо автору
 
   для: averkov   (30.09.2010 в 18:57)
 

Как вы узнали, что они не выполняются?
Может, у вас там при вызове хранимой процедуры возникает fatal error, скрипт просто прекращает работу, а у вас выключен вывод ошибок?
и у вас просят код всего файла index, как вы выразились, а не одной строчки.

  Ответить  
 
 автор: averkov   (01.10.2010 в 08:52)   письмо автору
 
   для: 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



и это возникает после того, если я помещаю запрос на хранимую процедуру.

  Ответить  
 
 автор: neadekvat   (01.10.2010 в 12:45)   письмо автору
 
   для: averkov   (01.10.2010 в 08:52)
 

Вы перевели?
Ожидается 1 параметр с типом "ресурс", вы передали булевое значение.
То есть ваш запрос mysql_query() возвращает не дескриптор, а false или true.
Соотстветственно, что-то не так с вашей хранимой процедурой.

  Ответить  
 
 автор: averkov   (02.10.2010 в 11:04)   письмо автору
 
   для: neadekvat   (01.10.2010 в 12:45)
 

Я понял причину этого эффекта.
Хранимые процедуры записываются в базу mysql, и с этой базой происходит соединение, когда инициализируется запрос к хранимой процедуре.
Естественно, что на другие запросы не получу ответа - нет соединения. Я закрыл соединение после выполнения процедуры и открыл новое соединение перед выполнением остальных запросов и всё стало ОК.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования