Я создал массив в php, содержащий несколько USER_ID. Я использую базу данных mysql, имеющую таблицу с именем USERS. Теперь я хочу выбрать только те строки из USERS, user_id которых сопоставляется с USER_ID в массиве.
заранее спасибо
$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
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) . ");";
Примеры 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'