У меня есть и массив с двумя значениями, и я хочу использовать его с оператором 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 ) . "' )";
Надеясь, что это помогает кому-то вроде меня. 🙂