|
|
|
| У меня вопрос к господам М Кузнецову и И. Симдянову.
Я приобрёл две Ваших книги:
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
(29.09.2010 в 11:00)
| | А можно увидеть другие запросы? Как они выглядят, они зависят от первого запроса в хранимой процедуре? | |
|
|
|
|
|
|
|
для: 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");
|
| |
|
|
|
|
|
|
|
для: averkov
(20.09.2011 в 17:40)
| | П переменные $t, $n, $ip откуда берутся? Это просто внешние переменные, которые не являются результатом этих запросов. | |
|
|
|
|
|
|
|
для: cheops
(20.09.2011 в 18:37)
| | $ip и $t - это ip адрес клиента, $n - количество посещений сайта клиентом. | |
|
|
|
|
|
|
|
для: averkov
(21.09.2011 в 09:05)
| | Во-первых, вам придется передавать эти значения в качестве параметров хранимой процедуре. | |
|
|
|
|
|
|
|
для: averkov
(20.09.2011 в 17:40)
| | Во-вторых хранимая процедура возвращает вам один дескриптор с результирующей таблицей. UPDATE, DELETE запросы могут быть спокойно помещены в хранимую процедуру, при условии, что вы передаете ей все необходимые для выполнения параметры. А вот SELECT-запросы, нужно либо объединять в один запрос, либо обрабатывать отдельно, чтобы на их результирующие запросы ссылались отдельные дескрипторы. | |
|
|
|
|
|
|
|
для: cheops
(21.09.2011 в 11:39)
| | Громадное Вам спасибо, но остаётся вопрос:
У меня в файле несколько SQL-запросов. Я один заменил вызовом хранимой процедуры (предварительно её создав). Этот вызов работает, а остальные запросы (в них ничего не менялось) должны работать или нет? У меня почему-то с вставкой вместо SQL-запроса вызова хранимой процедуры, остальные SQL-запросы перестали выполняться. | |
|
|
|
|
|
|
|
для: averkov
(21.09.2011 в 12:20)
| | Вообще так не должно быть... вероятно где-то есть досадная ошибка/опечатка. Самый верный вариант, если вы передадите мне ваш дамп базы данных (нужна только часть, обеспечивающая работу вашего кода) и страницу, чтобы я смог воспроизвести ситуацию у себя локально, повозиться с кодом и выяснить, в чем может быть дело. Умозрительно без кода, довольно сложно вычислить в чем может быть дело. Если вам не хочется выкладывать кусок дампа тут, можно выслать его мне на почту igor@softtime.ru. | |
|
|
|
|
|
|
|
для: cheops
(21.09.2011 в 13:00)
| | Уважаемый cheops!
Громадное Вам спасибо. Выслать ну просто нет возможности. Для меня главное - "...так не должно быть". | |
|
|
|