2015-03-09 1 views
0

Я пытаюсь создать файл 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'). И теперь он работает отлично. Спасибо всем за советы и помощь.

+1

Не используйте устаревший '' mysql_ * API. Используйте 'mysqli_' или' pdo' с подготовленными операторами. – Jens

+0

над вашим циклом 'while' вы можете' echo $ sql' посмотреть, какой у вас запрос. Вы можете просто скопировать запрос и запустить его непосредственно в своей базе данных. –

+1

Также включите php-ошибки, чтобы увидеть, есть ли какие-либо ошибки, а не предполагать. http://stackoverflow.com/questions/845021/how-to-get-useful-error-messages-in-php –

ответ

-1

Параметры, передаваемые для постановки IN в запросе должен быть внутри скобок как ниже

$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'))");

+0

Но мой параметр $ lstMl уже находится в формате «(1,2,3)» с кронштейны. –

+0

Не могли бы вы распечатать запрос и разместить его здесь? –

+0

сообщение об ошибке появляется, ссылаясь на некоторую другую строку кода PHP – Strawberry

Смежные вопросы