Оператор Mysql SELECT с php-массивом

Я создал массив в php, содержащий несколько идентификаторов USER_ID. Я использую базу данных mysql, имеющую таблицу с именем USERS. Теперь я хочу выбрать только те строки из ПОЛЬЗОВАТЕЛЕЙ, user_id которых сопоставляется с USER_ID в массиве.

Заранее спасибо

Ответы

Ответ 2

implode() массив в предложение IN в вашем SQL:

$sql = "SELECT * FROM tbl WHERE USER_ID IN (" . implode(",", $user_ids) . ");";

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

$sqlids = array();
foreach ($user_ids as $id) {
  // Escape and quote each id
  $sqlids[] = "'" . mysql_real_escape_string($id) . "'";
}
$sql = "SELECT * FROM tbl WHERE USER_ID IN (" . implode(",", $sqlids) . ");";

Ответ 3

Приведенные выше примеры IN, возможно, более чистые, но это другой подход. Я применил форматирование для удобства чтения. Обратите внимание: убедитесь, что используете mysql_real_escape_string() при создании массива $users, если имена пользователей отправлены пользователем или иным образом потенциально небезопасны.

<?php

$users = array('jim','mary','bob');

$userids = "USER_ID = '".implode("' \n   OR USER_ID = '",$users)."'";

echo "
SELECT *
FROM USERS
WHERE $userids
";

?>

ВЫХОДЫ

SELECT *
FROM USERS
WHERE USER_ID = 'jim' 
   OR USER_ID = 'mary' 
   OR USER_ID = 'bob'

http://codepad.org/YfkPBEaJ