Доброго всем дня. Возник вопрос по выборке данных из БД. PHP: ;mysqli->query("SELECT * FROM `zakazy` WHERE `idtovar` = '1'"); В данном случае php-интерпретатор легко выведет запись(-и), у которых поле 'idtovar' = 1. Но как вместо статичной единицы (1), поставить динамическое значение, зависящее от GET-параметра? То есть, что-бы `idtovat`, брал значение от единицы (двойки, тройки) идущей от того, что идет в адресной строке, после 'id=' (пример ссылки: index.php?id=1). Пробовал изменить запрос всякими способами, не один не удался. Например вот эти: PHP: mysqli->query("SELECT * FROM `zakazy` WHERE `idtovar` = '$_GET["id"]'"); PHP: mysqli->query("SELECT * FROM `zakazy` WHERE `idtovar` = '$_GET["index.php?id"]'"); Подскажите, что я не так делаю и как решить эту задачу. Заранее всем благодарен
Ты передаёшь в метод query аргумент как строку, чтобы сделать правильную конкатенацию (соединить) с переменной, нужно следовать правильному синтаксису по работе со строками, его можно изучить тут https://secure.php.net/manual/ru/language.types.string.php так как $_GET это массив, ты можешь в документации вычитать как вставлять в строку данные из массива по ключу. Так как тебе выше подсказали, надо экранировать данные которые ты вставляешь в SQL запрос, чтобы не нарушить его синтаксис. Экранируй так: https://secure.php.net/manual/ru/mysqli.real-escape-string.php https://secure.php.net/manual/ru/mysqli.prepare.php https://secure.php.net/manual/ru/mysqli-stmt.bind-param.php
Если 146% уверенность во входных данных, можно написать коротко и грязно: ... where idtovar = $_GET[id]
Я в исходном посте нигде не видел, что параметр именно извне. Может, это внутренний скрипт для служебного пользования.
$_GET значит извне, https://secure.php.net/manual/ru/language.variables.external.php даже если можно по говнокодить или для внутреннего использования, то надо хотя бы к int привести, а то мало ли, что-то накроет если туда мусор попадёт.
Это вполне входит в "146% уверенности во входных данных". Т.е. есть четкое знание, что там инт, а не мусор или sql-инъекция
Спасибо, приму к сведению А если нужно будет отсортировать по названию товара, а не по его айди? И в качестве аргумента придет текст? PHP: mysqli->query("SELECT * FROM `zakazy` WHERE `nametovar` = 'Компьютер'"); В данном случае скрипт: PHP: $mysqli->query("SELECT * FROM `zakazy` WHERE `nametovar` = '" . (int)$_GET['nametovar'] . "'"); Не принесет пользы. Что делать в данном случае?
Igorbay, с типом string, лучше обратиться к экранированию mysqli_real_escape_string я привел к типу (int) так как там ожидается целое число.