2014-02-16 4 views
0

Я пытаюсь взять array и взорвать его, а затем запустить его через запрос mysql для поиска моей базы данных для совпадений. Если есть совпадения, я хочу вернуть соответствующие значения. Он продолжает возвращаться, и я не уверен, почему. Я сделал vardump и вижу, что массив есть, но похоже, что он не передается mysql_query. Если я вручную помещаю массив в запрос, это не проблема. Есть идеи?Implode array & search for matches mysql php

Мой Array (Это происходит из моего Android App):

$refids = (jdu23764js84, 2746272jsjs7f, 39823874hbsjsk) 

PHP код сценария:

public function searchList($refids) { 
    $refarray = array($refids);   
    $comma_separated = implode(',', $refarray);    
    $result = mysql_query("SELECT `ref_id` FROM `main` WHERE `ref_id` IN 
    ({$comma_separated})");   
    if ($result == true){ 
     $result = mysql_fetch_array($result);      
      return $result;     
     } else { 
      return false; 
    } 
+0

вы уверены, что это массив, а не строка? –

ответ

1

Вы забыли процитировать отдельные значения внутри вашего $ refids, так что вы» re building

... WHERE `ref_id` IN (jdu23764js84, 2746272jsjs7f, ...) 

и MySQL интерпретирует их как имена полей. Другими словами, вы страдаете от атаки уязвимости инъекции SQL, и ваше полное отсутствие какой-либо обработки ошибок в коде базы данных не позволяет видеть ошибки MySQL пытается сказать вам о:

$csv = implode("','", $refarray); 
       ^-^-- note the addition of the quotes: 

$sql = "SELECT .... `ref_id` IN ('{$csv}')"; 
           ^------^--- again, note the quotes 

Это исправляет проблема в краткосрочной перспективе. В долгосрочной перспективе вам необходимо прочитать http://bobby-tables.com и узнать, что он вам скажет.

+0

Это не сработало. Это не разделение значений с отдельными кавычками. Это просто создание 'du23764js84, 2746272jsjs7f, 39823874hbsjsk' – Carbongixxer

+0

Тогда у вас есть строка, а не массив, и ваш implode бессмыслен. –

+0

'array ('f, o, o')' не дает вам массив с 3 элементами. он дает вам массив со строкой SINGLE внутри, которая имеет 3 буквы и 2 запятые. –