Как в sql запрос вставить переменную php
Перейти к содержимому

Как в sql запрос вставить переменную php

  • автор:

Как вставить переменную в 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, можно использовать один из следующих вариантов:

  1. Использовать подготовленные запросы. Это позволяет избежать SQL инъекций и передавать переменные в запрос безопасным способом. Пример:
 $stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email'); $stmt->execute(['email' => $email]); $user = $stmt->fetch(); 
  1. Сформировать строку запроса с помощью конкатенации строк и передать ее в функцию выполнения запроса. Пример:
 $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 в первом своём элементе содержит нифига не название колонки в таблице..

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *