2011-02-08 4 views
1

У меня есть запрос, как это с пунктом ВPHP массив MySQL Query

SQL = "

некоторые запросы ГДЕ some_item В()

";

Должен ли я сделать цикл for, чтобы поместить все элементы php-массива в предложение IN или есть функция или метод, которые это делают?

+0

Примечание Вы можете [формат строки как код] (http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code- блоков), отложив их в четыре пробела. Кнопка «{}» на панели инструментов редактора делает это за вас. Измените свой вопрос и попробуйте его. Нажмите оранжевую метку вопроса на панели инструментов редактора, чтобы получить дополнительную информацию и советы по форматированию. – outis

ответ

0

Вы можете попробовать лопаются

$item_ids = array(1, 2, 3, 4, 5); // somehow populate this array 
$item_list = implode(',', $item_ids); 

$sql = "SOME QUERY WHERE some_item IN ({$item_list})"; 
0

Вы можете использовать implode, как:

$ids = array(1, 2, 3); 
$query = 'SELECT * FROM items WHERE id IN(' . implode(',', $ids) . ')'; 
+0

большое вам спасибо! – Alexander

1

Для числовых значений в массиве:

sprintf("... WHERE some_item IN (%s) ...",implode(",",$numeric_array)); 

Для строковых значений:

sprintf("... WHERE some_item IN ('%s') ...",implode("','",$escaped_string_array)); 

Будьте осторожны, чтобы избежать значения при построение массивов.

Надеюсь, это поможет!

+1

вы можете сделать array_filter() раньше с вызовом метода escape и т. Д. Http://php.net/manual/en/function.array-filter.php – dogmatic69

+0

+1 для полезного комментария, спасибо :) – aorcsik

1

Если у вас есть список вещей в массиве, вы можете использовать JOIN для его создания. Это проще всего для числовых значений, так как вам не нужно ставить кавычки вокруг вещей. Что-то вроде этого:

$sql = 'SOME QUERY WHERE some_item IN (' . join(',', $a_myData) . ')'; 

Если массив содержит строки, вы должны бежать, что данные, как вы выразились данные в массив. Но как только вы это сделаете, вы можете сделать что-то подобное выше, добавив кавычки.

$sql = 'SOME QUERY WHERE some_item IN ("' . join('","', $a_myData) . '")'; 

Один потенциальный вопрос является пустым массивом, так как в приведенном выше примере даст вам IN (""), которые потенциально могли бы соответствовать то, что вы не хотите.

Приведенный выше пример также не учитывает значения NULL. Один из способов заключается в том, чтобы заполнить ваш массив строками с кавычками уже вокруг них (так что вы можете иметь NULL в качестве своего собственного значения).

+0

спасибо вам много! – Alexander