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

Ответы на вопрос(7)

Ваш ответ на вопрос