Как написать хорошую вставку базы данных PHP, используя ассоциативный массив
В 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 - изменение запланировано, но для преобразования потребуется много ресурсов?