2013-09-12 2 views
0

У меня есть флажок, который передает массив значений id. Я тогда взрывать массив так:Mysql IN() не работает

$ship = $_POST['result']; 
$array=implode(",", $ship); 
$shipping=ship_update($array); 

Функция запроса Mysql выглядит следующим образом:

function ship_update($array){ 
    global $MEMS; 
    echo $array; 
    $query="SELECT * FROM Inventory 
     WHERE MEMS_ID IN ('$array') 
      ORDER BY WAFER ASC, RC ASC"; 
    $shipping=$MEMS -> exec($query); 
    return $shipping; 
} 

Когда я запускаю этот код, $ доставка возвращает пустой запрос. Что я делаю не так?

+1

Вы должны повторить запрос, чтобы узнать, что случилось сами. Вам не хватает кавычек в ваших значениях, когда вы взорваетесь так. – Kethryweryn

+1

Что такое '$ query'? Кроме того, не забудьте очистить любые введенные пользователем поля перед тем, как поместить их в запрос. – Nicole

ответ

0

В середине вашего массива нет ни одной кавычки. Изменение

$array=implode(",", $ship); 

в

$array=implode("','", $ship); 
2

Это должно быть

$array = "'" . implode("','", $ship) . "'"; 

И в запросе,

$query="SELECT * FROM Inventory 
     WHERE MEMS_ID IN ($array) // remove the single quotes to 
     ORDER BY WAFER ASC, RC ASC"; // avoid syntax error 

предупреждение, это по-прежнему уязвимы с SQL Injection.

+1

Спасибо за помощь. Кроме того, $ shipping = $ MEMS -> exec ($ query) предположительно будет $ shipping = $ MEMS -> query ($ query). Это была вторая ошибка. Он работает сейчас. – user2773365

1

Попробуйте запрос без ' одинарные кавычки

SELECT * FROM Inventory 
     WHERE MEMS_ID IN ($array) 
      ORDER BY WAFER ASC, RC ASC 
+1

это лучший ответ при условии, что идентификаторы являются номерами только –

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