SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#26 10.08.2012 23:09:11

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Об одной особенности хранимых процедур в MySQL.

platedz написал:

Насколько я понимаю, подготовленные выражения в Php доступны только через mysqli и не доступны через mysql.

Да

Неактивен

 

#27 11.08.2012 06:39:22

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

Re: Об одной особенности хранимых процедур в MySQL.

Спасибо.


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

Неактивен

 

#28 12.08.2012 17:15:32

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

Re: Об одной особенности хранимых процедур в MySQL.

Здравствуйте. Насколько я понимаю, то в переменные по типу @var можно передать только значение ячейки те. что-то типа where tab=?
Название таблицы или колонки передать не получится, т.е. следуюдие выражения не работают
? id from table where col=1
select ? from table where col=1
select * ? table where col=1
select * from ? where col=1
select * from table ? col=1
select * from table where ?=1

Но при этом можно сделать так

mysqli_query($link, "SET @ab = 'select * from firm where id like ? ' ");
mysqli_query($link, "PREPARE cda FROM  @ab ");
mysqli_query($link, "SET @abc = 'магазин' ");
$r = mysqli_query($link, " EXECUTE cda USING @abc");

А вот засунуть в переменную @ab что-то или объединить ее каким-либо образом с другой переменной у меня не получается. Например чтобы составить запрос из двух частей скажем из
@a = 'select * from'; 
@b = 'firm where id like ? '
или для того, чтобы подсунуть в запрос имя таблицы.

Вообще можно что передавать какие-либо еще что-то через переменные, и как с ними лавировать?

И подскажите, пожалуйста, как правильно записать такой запрос

такой  работает верно, где нужно передать в качестве параметра число

mysqli_query($link, "PREPARE cda FROM 'select * from firm where id=2 ' ");

А вот как параметр с текстом передать в подготовленное выражение
mysqli_query($link, "PREPARE cda FROM 'select * from firm where id=текс ' ");

Заранее спасибо, за помощь.

Отредактированно platedz (12.08.2012 17:48:30)


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

Неактивен

 

#29 12.08.2012 22:58:56

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Об одной особенности хранимых процедур в MySQL.

platedz написал:

А вот засунуть в переменную @ab что-то или объединить ее каким-либо образом с другой переменной у меня не получается. Например чтобы составить запрос из двух частей скажем из
@a = 'select * from'; 
@b = 'firm where id like ? '
или для того, чтобы подсунуть в запрос имя таблицы.

А первое сообщение в этой теме вы читали? Там именно такой пример.

platedz написал:

И подскажите, пожалуйста, как правильно записать такой запрос

такой  работает верно, где нужно передать в качестве параметра число

mysqli_query($link, "PREPARE cda FROM 'select * from firm where id=2 ' ");

А вот как параметр с текстом передать в подготовленное выражение
mysqli_query($link, "PREPARE cda FROM 'select * from firm where id=текс ' ");

http://mysitez.km.ua/Programming/?phpquotes

Неактивен

 

#30 13.08.2012 02:36:35

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

Re: Об одной особенности хранимых процедур в MySQL.

Большое спасибо за ответ. Прочитал еще раз внимательно, но запрос сделать у меня так и не вышло.

Вот этот запрос работает


mysqli_query($link, "SET @ab = 'select * from table order by name' ");
mysqli_query($link, "PREPARE abc FROM @ab");
$result = mysqli_query($link, "EXECUTE abc");
 


А вот так не работает

mysqli_query($link, "SET @a = 'select * from', @b = ' table order by name' ");
mysqli_query($link, "PREPARE abc FROM @a, @b");
$result = mysqli_query($link, "EXECUTE abc");
 


Подскажите, пожалуйста, что я делаю не так


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

Неактивен

 

#31 13.08.2012 04:10:39

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Об одной особенности хранимых процедур в MySQL.

set @c=concat(@a,@b);
PREPARE abc FROM @c

Неактивен

 

#32 13.08.2012 11:12:33

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

Re: Об одной особенности хранимых процедур в MySQL.

Спасибо большое, все вышло.
Только так почему-то не работает так.

mysqli_query($link, "SET @a = 'select * from rubr ', @b = ' order by NAME_RUBR', @link = concat(@a,@b);");

Приходится разбивать запрос на две части

Подскажите еще, а можно ли передать запросы навроде массива?
Т.е. скажем я в зависимости от условий предопределяю запрос
У меня 2 запроса
Первый

PREPARE cda FROM  ' select * from table where id1=? and id2=?'
 


Второй

PREPARE cda FROM  ' select * from table where id1=? and id2=? and id3=?'
 


Соответственно в первом варианте мне необходимо писать
EXECUTE cda using @a,@b;


а во втором
EXECUTE cda using @a,@b,@c;


А можно записать как-то так

EXECUTE cda using @abс;


Соответстенно @abc = @a,@b или  @abc = @a,@b,@c В ЗАВИСИМОСТИ ОТ ПРЕДОПРЕДЕЛЕННОГО ВЫРАЖЕНИЯ.

И еще один вопрос можно ли как-то после using указать не переменные, а непосредственно значение, которое в ней содержится? И написать что-то навроде

EXECUTE cda using 'значение для id1','значение для id2';


И можно ли через знак вопроса передавать какие-нибудь другие значения, например названия таблиц или еще что-то ?

Отредактированно platedz (13.08.2012 11:14:33)


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

Неактивен

 

#33 13.08.2012 13:53:04

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Об одной особенности хранимых процедур в MySQL.

На все вопросы ответ отрицательный.

Неактивен

 

#34 13.08.2012 14:03:03

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

Re: Об одной особенности хранимых процедур в MySQL.

Ясно. Еще раз спасибо за ответы.


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

Неактивен

 

#35 30.12.2012 17:48:55

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

Re: Об одной особенности хранимых процедур в MySQL.

Подскажите, пожалуйста, насколько я понимаю, что выдав пользователю привилегии
EXECUTE, например через grant я даю ему только доступ к выполнению установленных инструкций, но запрещаю их создавать через PREPARE. Так ли это?
Соответственно, если так, то как мне необходимо использовать PREPARE и с какими правами? Где я могу назначить необходимые инструкции, чтобы например в случае получения доступа к выполнению команд на сервере, скажем на том же php, например получив фтп доступ, создание собственных инструкций им было бы невозможно.


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

Неактивен

 

#36 30.12.2012 18:04:35

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

Re: Об одной особенности хранимых процедур в MySQL.

Привилегия EXECUTE позволяет выполнять хранимые процедуры (не путать с PREPARE), а CREATE ROUTINE - создавать.

Неактивен

 

#37 30.12.2012 18:40:30

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

Re: Об одной особенности хранимых процедур в MySQL.

Большое спасибо за ответ.
А PREPARE, это что?
Я к сожалению, еще только начинаю более менее знакомиться с хранимыми процедурами.
Я создаю скажем так


mysqli_query($link, "SET @ab = 'select * from firm where id like ? ' ");
mysqli_query($link, "PREPARE cda FROM  @ab ");
mysqli_query($link, "SET @abc = 'магазин' ");
mysqli_query($link, " EXECUTE cda USING @abc")
 


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


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

Неактивен

 

#38 30.12.2012 18:47:56

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

Re: Об одной особенности хранимых процедур в MySQL.

PREPARE могут создавать все - это не хранимые процедуры, а подготовленные выражения. Более того, PREPARE обязаны быть созданы и использованы в рамках одного и того же подключения, а при отключении исчезают. По своим возможностям PREPARE мало отличаются от обычных запросов, поэтому на них отдельных привилегий нет. Хранимые процедуры - CREATE PROCEDURE.

Если есть еще вопросы, создавайте отдельную тему.

Неактивен

 

Board footer

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