Задавайте вопросы, мы ответим
Вы не зашли.
platedz написал:
Насколько я понимаю, подготовленные выражения в Php доступны только через mysqli и не доступны через 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)
Неактивен
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=текс ' ");
Неактивен
Большое спасибо за ответ. Прочитал еще раз внимательно, но запрос сделать у меня так и не вышло.
Вот этот запрос работает
Неактивен
set @c=concat(@a,@b);
PREPARE abc FROM @c
Неактивен
Спасибо большое, все вышло.
Только так почему-то не работает так.
Отредактированно platedz (13.08.2012 11:14:33)
Неактивен
На все вопросы ответ отрицательный.
Неактивен
Ясно. Еще раз спасибо за ответы.
Неактивен
Подскажите, пожалуйста, насколько я понимаю, что выдав пользователю привилегии
EXECUTE, например через grant я даю ему только доступ к выполнению установленных инструкций, но запрещаю их создавать через PREPARE. Так ли это?
Соответственно, если так, то как мне необходимо использовать PREPARE и с какими правами? Где я могу назначить необходимые инструкции, чтобы например в случае получения доступа к выполнению команд на сервере, скажем на том же php, например получив фтп доступ, создание собственных инструкций им было бы невозможно.
Неактивен
Привилегия EXECUTE позволяет выполнять хранимые процедуры (не путать с PREPARE), а CREATE ROUTINE - создавать.
Неактивен
Большое спасибо за ответ.
А PREPARE, это что?
Я к сожалению, еще только начинаю более менее знакомиться с хранимыми процедурами.
Я создаю скажем так
Неактивен
PREPARE могут создавать все - это не хранимые процедуры, а подготовленные выражения. Более того, PREPARE обязаны быть созданы и использованы в рамках одного и того же подключения, а при отключении исчезают. По своим возможностям PREPARE мало отличаются от обычных запросов, поэтому на них отдельных привилегий нет. Хранимые процедуры - CREATE PROCEDURE.
Если есть еще вопросы, создавайте отдельную тему.
Неактивен