Я пытаюсь создать файл PHP для моего приложения Android, которое выполняет запрос SELECT
из моей базы данных.Создание запроса MySql с инструкцией IN с php
Мне нужно использовать инструкцию IN, такую как UserID IN (3,5,9)
. Я отправляю в качестве параметров список в формате ()
или (1,2,3...)
.
Я стараюсь избегать иметь что-то вроде UserID IN()
, поэтому я добавил Ifs, чтобы определить, пуст ли список.
У меня есть два списка.
Я проверяю, пусты ли списки, и в соответствии с результатом я выбрал способ записи запроса SELECT. Это мой PHP-файл:
<?php
mysql_connect(/*It's GOOD*/);
mysql_select_db(/*It's GOOD*/);
$StrName = $_GET['StrName'];
$lstMl = $_GET['lstMl'];
$lstCat = $_GET['lstCat'];
$strCheck = "()";
echo $lstMl;
echo $lstCat;
if(strcmp($strCheck, $lstMl) == 0)
{
if(strcmp($strCheck, $lstCat) == 0)
{
$sql=mysql_query("SELECT DISTINCT Store.StoreID, Store.Name, Store.Description
FROM Store INNER JOIN
StoreCategory ON Store.StoreID = StoreCategory.StoreID
WHERE (Store.Name LIKE '%$StrName%')");
}
else
{
$sql=mysql_query("SELECT DISTINCT Store.StoreID, Store.Name, Store.Description
FROM Store INNER JOIN
StoreCategory ON Store.StoreID = StoreCategory.StoreID
WHERE (Store.Name LIKE '%$StrName%') OR (StoreCategory.CategoryID IN '$lstCat')");
}
}
else
{
if(strcmp($strCheck, $lstCat) == 0)
{
$sql=mysql_query("SELECT DISTINCT Store.StoreID, Store.Name, Store.Description
FROM Store INNER JOIN
StoreCategory ON Store.StoreID = StoreCategory.StoreID
WHERE (Store.Name LIKE '%$StrName%') OR (Store.MallID IN '$lstMl')");
}
else
{
$sql=mysql_query("SELECT DISTINCT Store.StoreID, Store.Name, Store.Description
FROM Store INNER JOIN
StoreCategory ON Store.StoreID = StoreCategory.StoreID
WHERE (Store.Name LIKE '%$StrName%') OR (StoreCategory.CategoryID IN '$lstCat') OR (Store.MallID IN '$lstMl')");
}
}
while($row=mysql_fetch_assoc($sql))
$output[]=$row;
print(json_encode($output));
mysql_close();
?>
списки, которые печатаются выглядит следующим образом: (1) и (1,3,5)
И это сообщение об ошибке я получаю, когда я пытаюсь написать URL в браузере: «Warning: mysql_fetch_assoc() ожидает параметр 1, чтобы быть ресурсом, логическим приведен в /home/u566430764/public_html/ibuy/query39.php на линию 50 нуля»
Моих PHP файлы падения в строке я написал while($row=mysql_fetch_assoc($sql))
. Я предполагаю, что у меня синтаксическая ошибка. Что я делаю не так? Заранее спасибо!
Я изменил параметры, отправленные в файл PHP, и теперь они выглядят так: «1,3,9» без скобок. И в запросе SQL SELECT
я сделал: Store.MallID IN ('$lstMl')
. И теперь он работает отлично. Спасибо всем за советы и помощь.
Не используйте устаревший '' mysql_ * API. Используйте 'mysqli_' или' pdo' с подготовленными операторами. – Jens
над вашим циклом 'while' вы можете' echo $ sql' посмотреть, какой у вас запрос. Вы можете просто скопировать запрос и запустить его непосредственно в своей базе данных. –
Также включите php-ошибки, чтобы увидеть, есть ли какие-либо ошибки, а не предполагать. http://stackoverflow.com/questions/845021/how-to-get-useful-error-messages-in-php –