Intereting Posts
При использовании SELECT вы можете изменить значение возвращаемого поля на основе других полей? Как получить значение миллисекунды из поля Timestamp в firebird с помощью Delphi 2007 Вывод данных Oracle Заявление SQL с использованием предложения Where с несколькими значениями Параметры хранимой процедуры SQL Server Прочитайте огромную таблицу с LINQ to SQL: Запуск из памяти против медленного подкачки SELECT 3 записи для каждой группы пользователей по двум столбцам Уведомлять мою службу WCF при обновлении моей базы данных группировка данных в соответствии с соответствующими значениями в sql-сервере Как создать два столбца из одного столбца Как группировать соседние местоположения широты и долготы, хранящиеся в SQL MySQL-запрос, который соответствует двум полям и имеет другое общее поле Как выбрать больше строк с MySQL после сортировки? Как я могу заставить этот запрос принимать имена динамических таблиц? Количество дней в диапазоне дат?

Выберите несколько идентификаторов из таблицы

Я хочу выбрать некоторый идентификатор на основе строки url, но с моим кодом он отображает только первый. Если я напишу руководство, id это отлично работает.

У меня есть такой URL-адрес: http://www.mydomain.com/myfile.php?theurl=1,2,3,4,5 (ids)

Теперь в myfile.php у меня есть мое соединение sql и:

$ids = $_GET['theurl']; (and i am getting 1,2,3,4,5)

если я использую это:

 $sql = "select * from info WHERE `id` IN (1,2,3,4,5)"; $slqtwo = mysql_query($sql); while ($tc = mysql_fetch_assoc($slqtwo)) { echo $tc['a_name']; echo " - "; } 

Я получаю правильные результаты. Теперь, если я использую следующий код, он не работает:

 $sql = "select * from info WHERE `id` IN ('$ids')"; $slqtwo = mysql_query($sql); while ($tc = mysql_fetch_assoc($slqtwo)) { echo $tc['a_name']; echo " - "; } 

Какие-либо предложения?

Когда вы интерполируете

 "select * from info WHERE `id` IN ('$ids')" 

с вашими идентификаторами вы получаете:

 "select * from info WHERE `id` IN ('1','2','3','4','5')" 

… который обрабатывает ваш набор идентификаторов как одну строку вместо набора целых чисел.

Избавьтесь от одиночных кавычек в предложении IN , как это:

 "select * from info WHERE `id` IN ($ids)" 

Кроме того, не забывайте, что вам нужно проверить атаки SQL Injection . Ваш код в настоящее время очень опасен и подвержен серьезной потере данных или доступу. Подумайте, что может случиться, если кто-то называет вашу веб-страницу следующим URL-адресом, а ваш код позволяет им выполнять несколько операторов в одном запросе:

 http://www.example.com/myfile.php?theurl=1);delete from info;-- 

Вы также можете попробовать функцию FIND_IN_SET ()

 $SQL = "select * from info WHERE FIND_IN_SET(`id`, '$ids')" 

ИЛИ

 $SQL = "select * from info WHERE `id` IN ($ids)"