@Suicide676
didusdev.com

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

Нужно сделать выборку из БД.

1. Соединяемся с сервером БД (успешно)
2. Выбираем БД (успешно)
3. Формируем запрос на получение данных из БД (ошибка)

переменные берутся из $_POST[].
$city = $_POST[city];
	$area = $_POST[area];
	$price1 = ($_POST[price]) + 50;
	$price2 = ($_POST[prise]) - 50;


запрос :
$querySell = ("
		SELECT * FROM mytable
		WHERE city = '.$city.'
		AND price <= '.$price1.'
		AND price >= '.$price2.'
		AND type = "Продать"
		;
	");


$result = mysql_query($querySell) or die (mysql_error());

ошибка : Query was empty

Вопрос:
Как правильно оформить вставку переменных в этот запрос?
  • Вопрос задан
  • 22409 просмотров
Пригласить эксперта
Ответы на вопрос 6
FanatPHP
@FanatPHP
Чебуратор тега РНР
Как вставить переменные в sql запрос на php?

Только. Через. Плесхолдеры.
Любой, кто отвечает иначе - тупой нуб, застрявший в прошлом веке и так и не осиливший даже азы программирования.

Соответственно, тебе нужна библиотека, которая поддерживает плейсхолдеры. Хотя старушку mysql ext можно заставить, но для новичка лучше всего подойдет PDO.

$sql = "SELECT * FROM mytable WHERE city = ? AND price BETWEEN ? AND ? AND type = 'Продать'";
$stmt = $pdo->prepare($sql);
$stmt->execute([$_POST['city'], $_POST['area'], $_POST['price']-50, $_POST['price']+50]);
$data = $stmt->fetchAll();

Как соединяться с БД и вообще про PDO читай здесь: phpfaq.ru/pdo

А твоя ошибка вызвана опечаткой и неправильной обработкой ошибок.
Во-первых, у тебя в какой-то из запросов передается пустая строка - скорее всего, из-за опечатки
Во-вторых, если бы в РНР было включено нормальное отображение ошибок, то РНР тебе бы сам ругнулся на эту опечатку.
В-третьих, если бы ошибки mysql обрабатывались по-человечески, то РНР тоже указал бы на тот конкретный запрос, который оказался пустым. И ты бы не хватался вместо него за первый попавшийся.
Ответ написан
Hakkunamatata
@Hakkunamatata
Зефирный-человек
Поменяйте местами кавычки у слова Продать (там одинарные в вашем случае нужны) с кавычками, которые используете при вставке переменных, там двойные
Ответ написан
@unclefeudorsnew
Используйте встроенные возможности PDO
Ответ написан
w999d
@w999d
Web-developer
1. нафига скобки? ("
2. '.$city.' и подобные заменить на '".$city."' либо '$city'
3. вы получили уязвимость на sql-инъекции. используйте PDO/mysqli_prepare/mysql_real_escape_string
4. mysql_ устарел и перестанет поддерживаться через какое-то время окончательно, используйте mysqli_/PDO

5. сделайте var_dump($querySell) из mysql_query. возможно это просто опечатка (вроде русской е заместо e либо I заместо l, у заместо y) либо $querySell определена в другой области видимости (другом методе, например)
6. "Продать" в одиночные кавычки - вы, как видно не используете подсветку синтаксиса, иначе увидели бы, что внутри получилось 2 строки "СТРОКА1"Продать"СТРОКА2" и Продать между ними.
Ответ написан
gluck59
@gluck59
Виртуальный глюк
Используйте богоугодные языки и символы.
$querySell = ('
    SELECT * FROM `mytable`
    WHERE `city` = '.$city.'
    AND `price` <= '.$price1.'
    AND `price` >= '.$price2.'
    AND `type` = 1
');

Type настроите сами.
Ответ написан
DieZz
@DieZz
Прочтите вот эту статью. Думаю, очень поможет habrahabr.ru/post/137664
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы