Вопрос по php, sql – Как представить массив PHP в виде строки с разделителями-запятыми? [Дубликат]

1

Possible Duplicate:
PHP/MYSQL using an array in WHERE clause

У меня есть массив со значениями идентификаторов [1,5,2,6,7 ...], и мне нужно использовать его в операторе MySQL item_id IN (1,5,2,6,7 ...) для выбора только строки с идентификатором, указанным в массиве. Как я могу преобразовать $ arrID в нечто, что я могу вставить в мой SQL-запрос?

РЕДАКТИРОВАТЬ контекст вызова:

<code>if(!IsNullOrEmptyString($_GET["view_playlist"])) {
        session_destroy();
    }
    $id_list = implode(",", $_SESSION("playlist"));
    $sql = 'SELECT t.track_id, t.track_title, t.track_num, al.album_title, g.genre_name, a.artist_name, t.length, t.track_rating '.
    'FROM track t, genre g, artist a, album al '.
    'WHERE t.track_id IN('.$id_list.' AND t.genre = g.genre_id AND t.artist = a.artist_id AND t.album = al.album_id';
</code>

Ваш Ответ

2   ответа
1

PDO или жеMySQLi (что вы должны, какmysql_ функции устарели и должны быть отменены), тогда вы захотите построить параметризованный запрос, используя количество элементов в вашем массиве, чтобы соответствовать числу?в вашем SQL.

Вот пример в PDO:

$ids = array(1, 2, 3, 4);

try {
    $dbh = new PDO("mysql:host=localhost;dbname=mydbname", 'username', 'password');
} catch(PDOException $e) {
    die($e->getMessage());
}

$inClause = trim(str_repeat('?, ', count($ids)), ', ');
$stm = $dbh->prepare('SELECT * FROM mytable WHERE id IN ('.$inClause.')');
$stm->execute($ids);

// resulting SQL: SELECT * FROM mytable WHERE id IN (?, ?, ?, ?)
Я использую mysqli, и почему вы думаете, что они устарели? Они отлично работают, никогда не было проблем? antonpug
@antonpug: Вы действительно понизили меня, потому чтоyou неправильно прочитал мой ответ? Я никогда не говорил, чтобы не использоватьmysqli функции. Я сказалmysql_ функции устарели и должны быть оставлены, а неmysqli, Этот ответ показывает правильный способ сделать это с помощью параметризованных запросов (который являетсяpreferred способ использования не-литеральных данных в SQL).
11

использованиеimplode();

$ids = implode(',', $your_array);
НАЙДЕНО. Сожалею. antonpug
Я отредактировал вопрос - ошибка возникает на линии, где вызывается implode. antonpug
Проверьте прямо перед этой строкой кода на наличие ошибки. Этот маленький фрагмент верен.
Кто проголосовал за это? И почему?
Я получаю сообщение об ошибке - PHP Fatal error: имя функции должно быть строкой antonpug

Похожие вопросы