Подтвердить что ты не робот

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

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

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

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)

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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

Ответ 4

Вам нужно взорвать массив с помощью ',' comma

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

SELECT * from table Where comp_id IN ($imploded_arr)

Ответ 5

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

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

Ответ 6

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

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

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

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

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

Ответ 7

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

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

Ответ 8

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

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

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

Ответ 9

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

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

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

SELECT * from table Where comp_id IN ($list)

Ответ 10

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

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

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

Ответ 11

Согласно ответу @barryhunter, который работает только с массивом, который содержит только целые числа:

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

Я сделал несколько настроек для работы с массивом строк:

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

Ответ 12

В нескольких предыдущих ответах есть некоторые риски внедрения SQL-кода. Это может быть хорошо, если вы абсолютно уверены, что $arr очищается (и останется таким). Но если вы не совсем уверены, вы можете уменьшить такой риск, используя $stmt->bindValue. Вот один из способов сделать это:

# PHP
$in_list = array();
for ($i = 0; $i < count($arr); $i++) {
    $key = 'in_param_' . i;
    $in_list[':' . $key] = array('id' => $arr[$i], 'param' => $key);
}
$keys = implode(', ', array_keys($in_list));

// Your SQL ...
$sql = "SELECT * FROM table where id IN ($keys)";


foreach ($in_list as $item) {
    $stmt->bindValue($item['param'], $item['id'], PDO::PARAM_INT);
}
$stmt = $this->getConnection()->prepare($sql)->execute();

Ответ 13

Если ваш массив из целых чисел:

$searchStringVar = implode(",",$nameIntAryVar);
$query="SELECT * from table NameTbl WHERE idCol='$idVar' AND comp_id IN ($searchStringVar)";

Если ваш массив из строк:

$searchStringVar = implode("','",$nameStringAryVar);
$query="SELECT * from table NameTbl WHERE idCol='$idVar' AND comp_id IN ('$searchStringVar')";