Как использовать php-массив с оператором sql IN?

У меня есть и массив с двумя значениями, и я хочу использовать его с оператором sql IN в select query.

Вот структура моей таблицы

id comp_id 1 2 2 3 3 1 

У меня есть массив $arr который имеет два значения Array ( [0] => 1 [1] => 2 )

Я хочу получить запись comp_id 1 и comp_id 2. Поэтому я написал следующий запрос.

 SELECT * from table Where comp_id IN ($arr) 

Но он не возвращает результаты.

 $sql = "SELECT * from table Where comp_id IN (".implode(',',$arr).")"; 

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

 $condition = implode(', ', $arr); 

Кроме того, вы можете сначала избежать значений (если вы не уверены в этом):

 $condition = implode(', ', array_map('mysql_real_escape_string', $arr)); 

$ arr – это php-массив, для сервера sql вам нужно отправить строку, которая будет проанализирована, вам нужно будет превратить ваш массив в список, например, 1, 2 и т. д.

для этого вы можете использовать функцию http://php.net/implode

поэтому перед запуском запроса попробуйте

 $arr = implode ( ', ', $arr); 

Вам нужно взорвать массив с запятой «,»

 $imploded_arr = implode(',', $arr); SELECT * from table Where comp_id IN ($imploded_arr) 

Вы смешиваете PHP и SQL – для оператора IN SQL вам нужен формат:

 SELECT * from table WHERE comp_id IN (1,2) 

Итак, чтобы получить это в PHP, вам нужно сделать что-то вроде:

 $sql = "SELECT * from table Where comp_id IN (".implode(',',$arr).")" 

Имейте в виду, что это работает только в том случае, если массив содержит целые числа. Вы должны избегать каждого элемента, если они являются строками.

Вам нужно что-то вроде:

 $sql = "SELECT * from table where comp_id in (".implode(',',$arr.")"; 

Вам нужно преобразовать $arr в строку. Самый простой способ с тем, что вы делаете, – использовать implode()

 $query = 'SELECT * from table Where comp_id IN (' . implode(',', $arr) . ')'; 

Прямо сейчас, если вы echo свой запрос, вы увидите, что вместо массива, находящегося в инструкции IN , это будет просто слово «Массив»,

Вам нужно преобразовать массив в строку для использования в запросе:

 $list = implode(',', $arr); 

Затем он может использоваться в разделе IN:

 SELECT * from table Where comp_id IN ($list) 

вы можете передать строку в mysql в качестве запроса, поэтому попробуйте это

 mysql_query("SELECT * FROM table WHERE comp_id IN (".implode(',',$arr).")"); 

Все люди здесь предлагают одно и то же, но я получил предупреждение в WordPress из-за простой ошибки. Вам нужно добавить запятые к вашей взорванной строке. Точнее, что-то вроде этого.

 $query = "SELECT *FROM table Where comp_id IN ( '" . implode( "', '", $sanitized_brands ) . "' )"; 

Надеясь, что это помогает кому-то вроде меня. 🙂