SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 30.12.2012 20:59:35

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Хранимые процедуры

Здравствуйте, подскажите пожалуйста
Я так понимаю, что хранимые процедуры должны определяться один раз.
Тогда возникает несколько вопросов.
Как определяются хранимые процедуры в php, да и в принципе, и где хранятся?
И как мне выполнить примерно такой код


mysqli_query($link, "SET @ab =");
mysqli_query($link, "PREPARE cda FROM  @ab ");
mysqli_query($link, "SET @abc = 'магазин' ");
mysqli_query($link, " EXECUTE cda USING @abc")

но с использованием хранимых процедур


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#2 31.12.2012 11:26:16

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Хранимые процедуры

Хранимые процедуры хранятся в базе данных. Создаются с помощью CREATE PROCEDURE, вызываются с помощью CALL. Примеры есть в документации: http://dev.mysql.com/doc/refman/5.5/en/ … edure.html
Первый пример там похож на то, что вы указали.

Из PHP хранимые процедуры тоже можно создавать (пример http://forums.mysql.com/read.php?98,161 … msg-189634 ). Если хотите пересоздать процедуру с тем же именем, то нужно сначала дропнуть старую.

Неактивен

 

#3 19.03.2013 06:10:23

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Хранимые процедуры

Здравствуйте, подскажите, пожалуйста.

У меня такой запрос


mysqli_query("$link,"set names cp1251 ");
mysqli_query("
$link,"PREPARE users FROM  'insert into  user SET `name`=?, `lastname`=?' ");


Я создаю две переменные
mysqli_query("$link,"SET  @n := 'Вася', @l := 'Петров' ");


И выполняю запрос
mysqli_query("$link,"EXECUTE users using  @n, @l ");


Но скажем у меня в текущей сессии все Петровы, но зовут их по разному, поэтому особого смысла использовать переменную @l мне нет необходимости.
Я пробовал предопределить выражение используя разные кавычки одинарная ( ' ) и косая ( ` ) кавычки не работают. Получилось с двойной ( " )
mysqli_query("$link,"PREPARE users FROM  'insert into  user SET `name`=?, lastname`=\"Петров\"' ");


Но, данные почему-то записались в неверной кодировке. Хотя если Петров занести в переменную @l, то все нормально. В чем может быть проблема

Вопрос второй. С одинарной вроде понятно, тк. она используется в самом запросе, а вот с остальным не ясно. Вообще просвятите, пожалуйста, по поводу синтаксиса использования Mysql, и в частности в предопределенных выражениях. И какие-то тонкости, отличия от обычных запросов,  частые ошибки.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#4 24.03.2013 23:36:16

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Хранимые процедуры

Подскажите, пожалуйста, при запросе через переменные и в частности через предопределенные выражения, нужно ли обрабатывать записываемую строку, например фукнцией mysqli_real_escape_string


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#5 24.03.2013 23:53:50

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Хранимые процедуры

Если это часть запроса, то нужно mysqli_real_escape_string, смотрите что написано про это в документации mysqli

Неактивен

 

#6 25.03.2013 00:13:07

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Хранимые процедуры

Я честно говоря ничего толком не нашел по этому поводу, но читал ранее, что предопределенные выражения и хранимые процедуры как раз защищают от sql-инъекций, и как бы спасают в тех ситуациях, когда разработчики забывают прописать тот же mysql_real_escape_string.

Просто когда запрос не предопределенных, то однозначно надо, а когда он сформирован с помощью хранимой процедуры, или как в моем случае с PREPARE?


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#7 25.03.2013 00:28:32

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Хранимые процедуры

Теперь запрос не будет уязвимым. Но важно, чтобы запрос, которым вы передаете реальные значения был синтаксически-корректным. Если в запрос SET вставить неэкранированную кавычку, то будет ошибка.

Неактивен

 

#8 25.03.2013 00:46:50

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Хранимые процедуры

Спасибо за ответ. И еще такой вопрос, касательно поддержки хранимых процедур.
Какие требуются расширения, версия mysql и тд. для работы с хранимыми процедурами, и насколько данная возможность поддерживается на хостингах.
Т.е. Возможно ли такое, что хранимые процедуры не будут работать на том или ином хостинге. Вопрос, конечно, не однозначный, но тем не менее. Так например php 5.3 есть не везде, а вот сказать, что что-то не будет работать под php 5.2 уже сложно.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#9 25.03.2013 01:15:24

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Хранимые процедуры

Процедуры поддерживаются начиная с MySQL 5.0, расширений устанавливать для этого не требуется. Насчет хостинга не знаю, должно работать, но у хостеров бывают нестандартные версии.

Неактивен

 

#10 25.03.2013 01:42:58

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Хранимые процедуры

Большое спасибо за ответ. А как понимать, нестандартные версии? И могут быть какие-либо проблемы, например с настройками, т.е. могут ли быть на хостинге настройки, из-за которых могут не работать процедуры?


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#11 25.03.2013 03:08:35

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Хранимые процедуры

Все зависит от хостинга. Могут, например, не дать прав на создание процедур. Если VDS или выделенный сервер, то проблем не будет, а для виртуального хостинга, большинство хостеров предлагают адекватные услуги, но за всех ответить нельзя.

Неактивен

 

#12 25.03.2013 14:25:58

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Хранимые процедуры

Ясно спасибо. Т.е. только права на создание процедур нужны?


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson