В PHP я хочу вставить в базу данных, используя данные, содержащиеся в ассоциативном массиве пар поле / значение.
Пример:
$_fields = array('field1'=>'value1','field2'=>'value2','field3'=>'value3');
Полученная вставка SQL должна выглядеть следующим образом:
INSERT INTO table (field1,field2,field3) VALUES ('value1','value2','value3');
Я предложил следующую однострочную версию PHP:
mysql_query("INSERT INTO table (".implode(',',array_keys($_fields)).") VALUES (".implode(',',array_values($_fields)).")");
Он разделяет ключи и значения ассоциативного массива и implodes
для генерации строки через запятую. Проблема в том, что он не экранирует и не цитирует значения, которые были вставлены в базу данных. Чтобы проиллюстрировать опасность, представьте, что в $_fields
содержится следующее:
$_fields = array('field1'=>"naustyvalue); drop table members; --");
Будет сгенерирован следующий SQL:
INSERT INTO table (field1) VALUES (naustyvalue); drop table members; --;
К счастью, несколько запросов не поддерживаются , тем не менее, кавычки и экранирование необходимы для предотвращения уязвимостей SQL-инъекций.
Как вы пишете свои PHP Mysql Inserts?
Примечание. Запросы, подготовленные для PDO или mysqli, в настоящее время не подходят для меня, поскольку база кода уже широко использует mysql - изменение запланировано, но для преобразования потребуется много ресурсов?