Я хотел бы преобразовать массив, если ID, в строку значений, разделенных запятой, для использования в запросе MySQL UPDATE. Как мне это сделать?Как вы выводите содержимое массива в виде строки, разделенной запятой?
ответ
Помните, чтобы избежать значения:
'"' . implode('","', array_map('mysql_real_escape_string', $data)) . '"'
implode(',', $array);
Перед выполнением запроса обязательно передайте результаты через mysql_real_escape_string(). Это должно предотвратить внедрение sql, если вы используете implode(), как предлагают другие.
И как упоминает ник, всегда проверяйте, чтобы убедиться, что массив не пуст или пуст первым, и обрабатывайте эти случаи. Поскольку вы имеете дело только с int, вам не помешает проверять тип ваших назначений, иначе вы получите sql-ошибки, если строка каким-то образом скользит.
Часто этот тип ситуации люди строят массив из другой таблицы для использования в 2-запрос .. Если это так, вы можете использовать подзапрос для достижения этой цели ,
Например. UPDATE Таблица SET Столбец = значение ГДЕ ИДЕНТИФИКАТОР (ВЫБОР ID из таблицы2 УСЛОВИЯ ГДЕ)
Это, вероятно, лучше, если все идентификаторы должны быть численными. Убедитесь, что он содержит по крайней мере одно целое с
$ids = array_filter($ids, 'is_int');
if (!$ids) {
//no valid ids returned.
die('or something');
}
$sql .= '(' . implode(',', $ids) . ')';
быть очень, очень осторожны инъекции SQL ... если вы создаете строки запроса, как это, вы, вероятно, сделал ошибку в проектировании. – rmeador 2008-11-18 03:10:30
Я не согласен, rmeador. если вы знаете, что содержимое массива безопасно (например, все целые числа), тогда вообще никакого вреда в этом стиле. – nickf 2008-11-18 04:10:05