2008-11-18 4 views
1

Я хотел бы преобразовать массив, если ID, в строку значений, разделенных запятой, для использования в запросе MySQL UPDATE. Как мне это сделать?Как вы выводите содержимое массива в виде строки, разделенной запятой?

+0

быть очень, очень осторожны инъекции SQL ... если вы создаете строки запроса, как это, вы, вероятно, сделал ошибку в проектировании. – rmeador 2008-11-18 03:10:30

+0

Я не согласен, rmeador. если вы знаете, что содержимое массива безопасно (например, все целые числа), тогда вообще никакого вреда в этом стиле. – nickf 2008-11-18 04:10:05

ответ

13

Помните, чтобы избежать значения:

'"' . implode('","', array_map('mysql_real_escape_string', $data)) . '"' 
2

Перед выполнением запроса обязательно передайте результаты через mysql_real_escape_string(). Это должно предотвратить внедрение sql, если вы используете implode(), как предлагают другие.

И как упоминает ник, всегда проверяйте, чтобы убедиться, что массив не пуст или пуст первым, и обрабатывайте эти случаи. Поскольку вы имеете дело только с int, вам не помешает проверять тип ваших назначений, иначе вы получите sql-ошибки, если строка каким-то образом скользит.

1

Часто этот тип ситуации люди строят массив из другой таблицы для использования в 2-запрос .. Если это так, вы можете использовать подзапрос для достижения этой цели ,

Например. UPDATE Таблица SET Столбец = значение ГДЕ ИДЕНТИФИКАТОР (ВЫБОР ID из таблицы2 УСЛОВИЯ ГДЕ)

0

Это, вероятно, лучше, если все идентификаторы должны быть численными. Убедитесь, что он содержит по крайней мере одно целое с

$ids = array_filter($ids, 'is_int'); 
if (!$ids) { 
    //no valid ids returned. 
    die('or something'); 
} 
$sql .= '(' . implode(',', $ids) . ')';