<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум PHP-MyAdmin.RU &mdash; Хранимые процедуры]]></title>
	<link rel="self" href="https://forum.php-myadmin.ru/extern.php?action=feed&amp;tid=327&amp;type=atom" />
	<updated>2007-02-13T15:24:02Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.php-myadmin.ru/viewtopic.php?id=327</id>
		<entry>
			<title type="html"><![CDATA[Re: Хранимые процедуры]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=1965#p1965" />
			<content type="html"><![CDATA[<p><strong>anlide</strong><br />Пожалуйста, рад был помочь.<br />В свою очередь благодарю вас за ценные дополнения.</p>]]></content>
			<author>
				<name><![CDATA[Hanut]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=181</uri>
			</author>
			<updated>2007-02-13T15:24:02Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=1965#p1965</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хранимые процедуры]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=1959#p1959" />
			<content type="html"><![CDATA[<p>Спасибо большое, вы ответили на мои вопросы <img src="https://forum.php-myadmin.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> .</p><p>Хочу также заметить, что хранимая процедура создаётся в текущей выбранной БД. То есть если была команда &quot;use myDB&quot; то после этого можно не указывать (default).<br />На тему delimiter в mysql - вы всё правильно описали. Но тем-не-менее из php скрипта новость добавляется посредством команды CALL. Даже несмотря, что у меня были грубые нарушения в синтаксисе... видимо на самом деле mysql смотрит комбинацию символов после слова delimiter до ближайшего пробела или конца строки.<br />В phpmyadmin теперь тоже скрипт запускается <img src="https://forum.php-myadmin.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> большое вам спасибо <img src="https://forum.php-myadmin.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p><p>Ещё стоит упамянуть о такой детальке. У меня в скрипте не хотела выполнятся эта процедура. Проблема была в том, что в phpmyadmin пользователь имеет полные права. А в скрипте очень ограниченные (я специально обрезал доступ). В результате выяснилось, что надо было поставить право на команду EXECUTE...</p>]]></content>
			<author>
				<name><![CDATA[anlide]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=412</uri>
			</author>
			<updated>2007-02-13T07:20:06Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=1959#p1959</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хранимые процедуры]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=1950#p1950" />
			<content type="html"><![CDATA[<p><strong>anlide</strong><br /></p><div class="codebox"><pre><code>DROP PROCEDURE IF EXISTS db_name.addnews;
DELIMITER //
CREATE PROCEDURE db_name.addnews (id_user_in INT, title_in varbinary(128), data_in blob)
BEGIN
INSERT INTO `news` SET `time_in`=NOW(), `id_user`=id_user_in, `title`=title_in, `data`=data_in;
END;//
DELIMITER ;</code></pre></div><p>Этот вариант ближе к тому, что предлагает документация MySQL, которую вам стоило почитать, плюс определяет БД хранимой процедуры, если она отличается от изначальной (default). db_name - имя БД для хранения и вызова процедуры. Обратите внимание на существенные различия:<br />1) delimiter определяется подстановкой символов, то есть у вас delimiter получается не &quot;;;&quot;, а &quot;;; ;&quot;.<br />2) Конец запроса, тоже не корректен &quot;END;;&quot;, здесь должно быть &quot;END;&quot;.<br />3) Возврат символа разделителя &quot;;&quot; должен выглядеть так &quot;DELIMITER ;&quot;.</p><p>Теперь по поводу phpMyAdmin. Во вкладке SQL, как я уже говорил, есть поле delimiter, в которое надо вставить символ разделитель, в предлагаемом мной примере это &quot;//&quot;, естественно из запросв строку определяющую разделитель надо убрать и оставить только сам запрос<br /></p><div class="codebox"><pre><code>DROP PROCEDURE IF EXISTS db_name.addnews//
CREATE PROCEDURE db_name.addnews (id_user_in INT, title_in varbinary(128), data_in blob)
BEGIN
INSERT INTO `news` SET `time_in`=NOW(), `id_user`=id_user_in, `title`=title_in, `data`=data_in;
END;//</code></pre></div><p>Обратите внимание, что оба запроса должны быть отделены установленым разделителем в виде &quot;//&quot;.</p>]]></content>
			<author>
				<name><![CDATA[Hanut]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=181</uri>
			</author>
			<updated>2007-02-12T11:22:14Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=1950#p1950</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хранимые процедуры]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=1945#p1945" />
			<content type="html"><![CDATA[<p>Вот код, который работает через консольку mysql.<br /></p><div class="codebox"><pre><code>DROP PROCEDURE IF EXISTS addnews;
DELIMITER ;; ;
CREATE PROCEDURE addnews (id_user_in INT, title_in varbinary(128), data_in blob)
BEGIN
INSERT INTO `news` SET `time_in`=NOW(), `id_user`=id_user_in, `title`=title_in, `data`=data_in;
END;;
DELIMITER ; ;;</code></pre></div><p>Если где угодно вызвать &quot;CALL addnews (1,&#039;test&#039;,&#039;test body&#039;);&quot; - то соответственно процедура будет выполнена. Дело в том, что внутри операторных скобок &quot;begin...end&quot; должны стоять команды отделённые &quot;;&quot;. НО!!! mysql распознаёт эту &quot;;&quot; как конец ПРОЦЕДУРЫ. Соответственно вылетает с синтаксической ошибкой. В инете я насмотрел многие сталкиваются с этой проблемой - решение использование DELIMITER. Который заменяет ключевой символ конца команды на любой другой. Символ &quot;;&quot; теперь свободен и может быть использован по назначению внутри процедуры.</p><p>Далее - phpmyadmin непонимает команду DELIMITER. Со страшнючими матами вылетает с ошибкой. Выполнение всего запроса соответственно невозможно.</p><p>С правами доступа я буду разбиратся позже... ща главное чтоб хоть как-то работало...</p><p>Спасибо, попробую новый phpmyadmin...</p>]]></content>
			<author>
				<name><![CDATA[anlide]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=412</uri>
			</author>
			<updated>2007-02-11T22:50:02Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=1945#p1945</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хранимые процедуры]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=1941#p1941" />
			<content type="html"><![CDATA[<p><strong>anlide</strong><br />Да дело то не только в том, где хранить процедуры, но и в том как их вызывать.<br />db_name.sp_name</p><p>Надо также понимать, что некоторые процедуры может выполнять только root или пользователь наделенный grant привилегиями, так как иногда требуется доступ к БД mysql.</p><p>Как это - &quot;phpMyAdmin не понимает delimiter&quot; - а на кой лях поле delimiter во вкладке SQL?</p>]]></content>
			<author>
				<name><![CDATA[Hanut]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=181</uri>
			</author>
			<updated>2007-02-11T15:56:09Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=1941#p1941</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хранимые процедуры]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=1940#p1940" />
			<content type="html"><![CDATA[<p><strong>anlide</strong><br />Попробуй 2.9.2 - Это последняя стабильная версия, в ней как раз улучшена работа с хранимыми процедурами и др. &quot;вкусностями&quot; MySQL 5<br /><a href="http://php-myadmin.ru/release/2.9.2.html">Аннотация phpMyAdmin 2.9.2</a><br /><a href="http://php-myadmin.ru/download/index.html#pma2.9.2">Скачать phpMyAdmin 2.9.2</a></p>]]></content>
			<author>
				<name><![CDATA[Lokki]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=2</uri>
			</author>
			<updated>2007-02-11T15:47:33Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=1940#p1940</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хранимые процедуры]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=1939#p1939" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Lokki сказал:</cite><blockquote><p><strong>anlide</strong><br />Версия phpMyAdmin какая установлена?</p></blockquote></div><p>phpMyAdmin - 2.9.0.3</p>]]></content>
			<author>
				<name><![CDATA[anlide]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=412</uri>
			</author>
			<updated>2007-02-11T15:38:31Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=1939#p1939</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хранимые процедуры]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=1938#p1938" />
			<content type="html"><![CDATA[<p><strong>anlide</strong><br />Версия phpMyAdmin какая установлена?</p>]]></content>
			<author>
				<name><![CDATA[Lokki]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=2</uri>
			</author>
			<updated>2007-02-11T15:19:32Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=1938#p1938</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хранимые процедуры]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=1937#p1937" />
			<content type="html"><![CDATA[<p>Да, через командную строку работает. И создаётся в базе &quot;mysql&quot;, как сделать так, чтоб оно в моей базе сохранялась?<br />Проблема в том, что phpmyamdin не понимает команды &quot;delimiter&quot; вот и всё...</p>]]></content>
			<author>
				<name><![CDATA[anlide]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=412</uri>
			</author>
			<updated>2007-02-11T14:47:20Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=1937#p1937</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Хранимые процедуры]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=1935#p1935" />
			<content type="html"><![CDATA[<p>Не забывайте писать версии используемых программ, в частности сервера MySQL и используемого скрипта phpMyAdmin.</p><p>Запрос выполняется через phpMyAdmin? Пробовали через командную строку?</p><p>Запрос без использования процедуры выполняется нормально?<br />INSERT INTO `news` SET `time_in`=NOW(), `id_user`=id_user_in, `title`=title_in, `data`=data_in;</p><p>Вообще-то тонкостей использования процедур и функций очень много, я все равно не смогу перекопировать сюда весь справочный материал из руководства MySQL. Например, если не указывать БД для которой сохраняется процедура, то она будет сохраняться для изначальной (default) БД.</p>]]></content>
			<author>
				<name><![CDATA[Hanut]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=181</uri>
			</author>
			<updated>2007-02-11T11:33:38Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=1935#p1935</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Хранимые процедуры]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=1933#p1933" />
			<content type="html"><![CDATA[<p>Подскажите plz что я неправильно делаю:<br /></p><div class="codebox"><pre><code>DROP PROCEDURE IF EXISTS addnews;
CREATE PROCEDURE addnews (id_user_in INT, title_in varbinary(128), data_in blob)
BEGIN
INSERT INTO `news` SET `time_in`=NOW(), `id_user`=id_user_in, `title`=title_in, `data`=data_in;
END;</code></pre></div><p>При этом есть таблица `news`:<br /></p><div class="codebox"><pre><code>CREATE TABLE `news` (
  `id` int(11) NOT NULL auto_increment,
  `time_in` datetime NOT NULL,
  `id_user` int(11) NOT NULL,
  `title` varchar(128) NOT NULL,
  `data` text NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `time_in` (`time_in`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;</code></pre></div><p>Возвращает следующее:<br /></p><div class="codebox"><pre><code>#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near &#039;INSERT INTO `news` SET `time_in`=NOW(), `id_user`=id_user_in, `title`=title_in, &#039; at line 3</code></pre></div><p>Заранее большое спасибо...</p>]]></content>
			<author>
				<name><![CDATA[anlide]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=412</uri>
			</author>
			<updated>2007-02-11T07:30:46Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=1933#p1933</id>
		</entry>
</feed>
