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

Форум MySQL

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

 

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

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

тема: Выполнение нескольких запросов в одной хранимой процедуре?
 
 автор: averkov   (29.09.2010 в 11:00)   письмо автору
 
 

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

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

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

  Ответить  
 
 автор: cheops   (20.09.2011 в 16:01)   письмо автору
 
   для: averkov   (29.09.2010 в 11:00)
 

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

  Ответить  
 
 автор: averkov   (20.09.2011 в 17:40)   письмо автору
 
   для: cheops   (20.09.2011 в 16:01)
 

$result = mysql_query("SELECT * FROM settings WHERE page='index'",$db);
$res = mysql_query("SELECT cat,title FROM categories WHERE cat='08'",$db);
$result9 = mysql_query ("SELECT * FROM entries WHERE activ='1'");
$ress = mysql_query("SELECT view,fam FROM client WHERE ip='$t'",$db);
$updade = mysql_query ("UPDATE client SET view='$n' WHERE ip='$t'",$db);
mysql_query ("DELETE FROM online WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(time) > 300") or die ("Can't delete old sess");
mysql_query ("UPDATE online SET time=NOW() WHERE ip='$ip'") or die ("Can't update");

  Ответить  
 
 автор: cheops   (20.09.2011 в 18:37)   письмо автору
 
   для: averkov   (20.09.2011 в 17:40)
 

П переменные $t, $n, $ip откуда берутся? Это просто внешние переменные, которые не являются результатом этих запросов.

  Ответить  
 
 автор: averkov   (21.09.2011 в 09:05)   письмо автору
 
   для: cheops   (20.09.2011 в 18:37)
 

$ip и $t - это ip адрес клиента, $n - количество посещений сайта клиентом.

  Ответить  
 
 автор: cheops   (21.09.2011 в 11:37)   письмо автору
 
   для: averkov   (21.09.2011 в 09:05)
 

Во-первых, вам придется передавать эти значения в качестве параметров хранимой процедуре.

  Ответить  
 
 автор: cheops   (21.09.2011 в 11:39)   письмо автору
 
   для: averkov   (20.09.2011 в 17:40)
 

Во-вторых хранимая процедура возвращает вам один дескриптор с результирующей таблицей. UPDATE, DELETE запросы могут быть спокойно помещены в хранимую процедуру, при условии, что вы передаете ей все необходимые для выполнения параметры. А вот SELECT-запросы, нужно либо объединять в один запрос, либо обрабатывать отдельно, чтобы на их результирующие запросы ссылались отдельные дескрипторы.

  Ответить  
 
 автор: averkov   (21.09.2011 в 12:20)   письмо автору
 
   для: cheops   (21.09.2011 в 11:39)
 

Громадное Вам спасибо, но остаётся вопрос:
У меня в файле несколько SQL-запросов. Я один заменил вызовом хранимой процедуры (предварительно её создав). Этот вызов работает, а остальные запросы (в них ничего не менялось) должны работать или нет? У меня почему-то с вставкой вместо SQL-запроса вызова хранимой процедуры, остальные SQL-запросы перестали выполняться.

  Ответить  
 
 автор: cheops   (21.09.2011 в 13:00)   письмо автору
 
   для: averkov   (21.09.2011 в 12:20)
 

Вообще так не должно быть... вероятно где-то есть досадная ошибка/опечатка. Самый верный вариант, если вы передадите мне ваш дамп базы данных (нужна только часть, обеспечивающая работу вашего кода) и страницу, чтобы я смог воспроизвести ситуацию у себя локально, повозиться с кодом и выяснить, в чем может быть дело. Умозрительно без кода, довольно сложно вычислить в чем может быть дело. Если вам не хочется выкладывать кусок дампа тут, можно выслать его мне на почту igor@softtime.ru.

  Ответить  
 
 автор: averkov   (21.09.2011 в 14:05)   письмо автору
 
   для: cheops   (21.09.2011 в 13:00)
 

Уважаемый cheops!
Громадное Вам спасибо. Выслать ну просто нет возможности. Для меня главное - "...так не должно быть".

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

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