Оператор Mysql SELECT с php-массивом
Я создал массив в php, содержащий несколько идентификаторов USER_ID. Я использую базу данных mysql, имеющую таблицу с именем USERS.
Теперь я хочу выбрать только те строки из ПОЛЬЗОВАТЕЛЕЙ, user_id которых сопоставляется с USER_ID в массиве.
Заранее спасибо
Ответы
Ответ 1
$ids = join(',',$user_ids);
$sql = "SELECT * FROM USERS WHERE user_id IN ($ids)";
Передача массива в запрос с использованием предложения WHERE
http://www.php.net/manual/en/function.join.php
http://www.php.net/manual/en/function.implode.php
Ответ 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