Удаление нескольких элементов в PHP - PullRequest
1 голос
/ 14 июля 2009

У меня есть список пунктов, которые необходимо передать, которые должны быть удалены. Как я могу сделать это в PHP?

$query = "DELETE from members WHERE member_id ='$chan[2]' ";

$chan[2] содержит несколько значений, но удаляет только одно.

Ответы [ 5 ]

10 голосов
/ 14 июля 2009

$ chan [2] ссылается на один элемент в массиве $ chan. Итак, я думаю, вы имеете в виду, что $ chan имеет несколько значений.

Попробуйте это:


$query = "DELETE FROM members WHERE member_id IN (" . implode(", ", $chan) . ");";
3 голосов
/ 14 июля 2009

Используйте

$query = "DELETE FROM members WHERE member_id IN (" . join("," $chan[2]) . ")";

, если $chan[2] содержит список идентификаторов, которые будут удалены. Также убедитесь, что вы передаете только числовые значения в запрос, чтобы избежать проблем с внедрением SQL.

0 голосов
/ 14 июля 2009

взорвать ответы, приведенные выше, являются правильным способом. Чисто ради того, чтобы прояснить, что там происходит; это код, который вы использовали бы, если implode не существует (я так понимаю, $ chan - это двумерный массив, поэтому $ chan [2] имеет 5 членов, используйте $ chan, если нет)

// start roll-your-own $member_id_cond = implode(", ",$chan[2]);
$member_id_cond = "";
foreach( $chan[2] as $key => $data) {
     $member_id_cond .= $data . ", ";
     if($key == 4)  {  //this is just to remove the last comma
           $member_id_cond = sub_str($member_id_cond, 0, -2);
     }
 }
 //end implode 
 $query = "DELETE FROM members WHERE member_id IN ($member_id_cond)";
0 голосов
/ 14 июля 2009

Оператор равенства удалит только те значения, которые точно соответствуют заданному значению. Если у вас есть несколько идентификаторов в массиве, вам нужно использовать другое условие. Вы можете использовать функцию MYSQL FIND_IN_SET(), например, если это ваша база данных:

$ids = array(1, 2, 3);
$query = "DELETE FROM members WHERE FIND_IN_SET(member_id, '" . implode(',', $ids) . "')";

Еще одна вещь: будьте очень, очень осторожны, если вы получили идентификаторы от пользователя. Может содержать фиктивные данные . Санация выполняется с помощью mysql_escape_string():

$ids = array_map('mysql_escape_string', $ids);
0 голосов
/ 14 июля 2009
$member_ids = implode(", ", $chan);
"$query = "DELETE from members WHERE member_id IN ($member_ids)";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...