Как вставить переменную в sql запрос
Чтобы вставить переменную в SQL-запрос, вам нужно использовать специальный синтаксис в зависимости от типа базы данных.
Например, если вы используете MySQL, то для вставки переменной в запрос можно использовать символ ? , а затем передать значения переменных в запрос с помощью метода execute() :
INSERT INTO mytable (column1, column2, column3) VALUES (?, ?, ?);
Затем, при выполнении запроса, вы должны передать кортеж значений, содержащий значения для каждой переменной, например:
cursor.execute("INSERT INTO mytable (column1, column2, column3) VALUES (?, ?, ?)", (value1, value2, value3))
В других базах данных, таких как PostgreSQL или Oracle, вы можете использовать именованные параметры вместо символа ?. Например:
INSERT INTO mytable (column1, column2, column3) VALUES (:value1, :value2, :value3);
А затем, при выполнении запроса, вы можете передать словарь, содержащий значения для каждой переменной:
cursor.execute("INSERT INTO mytable (column1, column2, column3) VALUES (:value1, :value2, :value3)", 'value1': 'foo', 'value2': 'bar', 'value3': 'baz'>)
В обоих случаях используется привязка параметров, что позволяет защитить запрос от инъекций и упрощает вставку значений в запросы.
Как в запрос к MySQL поставить переменную
«SELECT name, surname FROM datacenter WHERE surname = ‘$surname'» А как вместо name и surname вставить переменную?
21 ноя 2012 в 23:40
«SELECT name, «.$varible.»FROM datacenter WHERE surname = «.$var.»»
22 ноя 2012 в 10:14
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
$surname = "Бухарова"; $result = mysql_query("SELECT name, surname, class_str, class_int FROM datacenter WHERE surname = '$surname'");
Отслеживать
ответ дан 19 ноя 2011 в 13:55
734 1 1 золотой знак 7 7 серебряных знаков 29 29 бронзовых знаков
Для ухода от возможных проблем с кавычками, если значение из локального окружения, и для избежания SQL-инъекций, если значение берется из GET или POST, есть смысл поставить экранирование mysql_real_escape_string()
19 ноя 2011 в 15:00
‘SELECT name, surname, class_str, class_int FROM datacenter WHERE surname = «‘. mysql_real_escape_string($surname) .'»‘;
19 ноя 2011 в 15:07
или в ‘$foo’ или без них, без разницы
$result = mysql_query(«SELECT name, surname, class_str, class_int FROM datacenter WHERE surname = $foo»);
Отслеживать
ответ дан 19 ноя 2011 в 15:05
1,814 2 2 золотых знака 20 20 серебряных знаков 47 47 бронзовых знаков
Как это без разницы?
19 ноя 2011 в 15:07
Сколько раз писал, никогда проблем не возникало.
19 ноя 2011 в 15:09
Быть такого не может! Строка всегда должна быть в кавычках. Учите матчасть.
19 ноя 2011 в 15:13
Не могло оно у вас работать. Повторюсь, строка всегда должна быть в кавычках. Без кавычек SQL-парсер будет пытаться проанализировать ее как набор SQL-операторов или названий таблиц, колонок и т.д.
19 ноя 2011 в 15:16
mysql_query() — не асинхронная функция. И передача строки с запросом, и его разбор сервером, и компиляция, и выборка и подготовка результата — все в одном флаконе функции mysql_query() . Поэтому ошибку SQL-синтаксиса он вернет не выходя из нее.
11 июл 2012 в 21:17
На счет подстановки переменных, СРАЗУ делайте правильно, а правильно значит переменную перед постановкой нужно хорошенько отфильтровать (это относится, если вы переменный подставляете из всяческих ПОСТ и ГЕТ запросов) я лично пользуюсь php placeholder пример
$query = sql_placeholder('select * from users where email=? and password=? limit 1', $_POST['email'], $_POST['pass']);
Отслеживать
ответ дан 8 апр 2012 в 7:38
224 6 6 серебряных знаков 22 22 бронзовых знака
- php
- mysql
-
Важное на Мете
Связанные
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.3.8.5973
Как в sql запрос вставить переменную php
Для того чтобы передать переменную в SQL запрос в PHP, можно использовать один из следующих вариантов:
- Использовать подготовленные запросы. Это позволяет избежать SQL инъекций и передавать переменные в запрос безопасным способом. Пример:
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email'); $stmt->execute(['email' => $email]); $user = $stmt->fetch();
- Сформировать строку запроса с помощью конкатенации строк и передать ее в функцию выполнения запроса. Пример:
$sql = "SELECT * FROM users WHERE email = '" . $email . "'"; $result = mysqli_query($conn, $sql); $user = mysqli_fetch_assoc($result);
Важно учитывать, что при использовании второго варианта возможна SQL инъекция, поэтому необходимо очищать переменные перед использованием их в запросе.
Для более детального изучения вопроса «SQL инъекции» рекомендуем просмотреть урок Безопасность при работе с внешними данными из курса PHP PDO: Работа с базой данных
Как в sql запрос вставить переменную php
У меня есть код: prepare(«SELECT `Calvin` FROM `users` WHERE `login` = ? «); он работает,значение поля `Calvin`(в базе данных значение этого поля число 12) выводится.
вопрос: как вставить переменную заместо этого `Calvin`?(Допустим переменную $a = ‘Calvin’ ).
я пишу вот так: prepare(«SELECT FROM `users` WHERE `login` = ? «); но в таком случае у меня не выводится содержимое этого поля(выводится просто 0), в отличие от кода, который я привел в начале.
этот код тоже выводит просто 0 :
prepare(«SELECT ? FROM `users` WHERE `login` = ? «)
execute(array($_POST[‘Calvin’],$_SESSION[‘user’]));
Лучший ответ
> Допустим переменную $a = ‘Calvin’
строго говоря, лучше $a = ‘`Calvin`’, но вроде бы и без кавычек должно пройти, хз зачем их всегда пишут
> prepare(«SELECT < $a >FROM `users` WHERE `login` = ? «);
string interpolation не работает, когда есть пробелы внутри скобок
надо SELECT FROM .
(блин, майлру их сам доставляет, ну в общем после < и перед >)
> execute(array($_POST[‘Calvin’],$_SESSION[‘user’]));
у тебя $_POST[‘Calvin’] == ‘Calvin’? в общем-то он просто строку подставит вместо имени поля, поэтому у тебя в выводе будет строка «Calvin», мб 0 уже при попытке распарсить число получается или типа того, хз как это в пыхе работает
ну и вообще если тебе так приходится делать, то есть подозрения, что ты неправильно спроектировал свою БД
who I amУченик (196) 1 год назад
да,проблема в пробеле была. спасибо,помог)
> у тебя $_POST[‘Calvin’] == ‘Calvin’? в общем-то он просто строку подставит вместо имени поля, поэтому у тебя в выводе будет строка «Calvin», мб 0 уже при попытке распарсить число
да, там просто Calvin выводится я ошибся немного.
а вот почему он просто строку вместо имени подставит это конечно интересно, этого я не понимаю, ни в одной книге из тех, которые я читал про это не говорилось.
user49913 Просветленный (38592) потому что так работают prepared statement-ы они же не могут отличить, строку ты туда хотел подставить или имя столбца, поэтому подставляют строку ну и вообще, как я уже сказал, пользовательский ввод не должен влиять на структуру запроса, только на значения в нём наверняка твою бд и/или программу можно перепроектировать так, чтобы к таким хакам прибегать не приходилось
Остальные ответы
у тебя первый «вопрос», т. е. placeholder в твоём запросе заменяется первым элементом массива. Ты уверен, что $_POST[‘Calvin’] содержит название столбца в таблице в БД?
Смотри, запрос у тебя составлен так:
SELECT? FROM `users`
т. е. вместо «?» — должно быть название столбца. Например, «name», да?
т. е. весь запрос должен примерно выглядеть как:
«Select name FROM `users` WHERE `login` = ? «
так вот, я почему-то уверен, что массив, который ты скармливаешь функции Execute в первом своём элементе содержит нифига не название колонки в таблице..