Jak napisać dobry wkład do bazy PHP przy użyciu tablicy asocjacyjnej

W PHP chcę wstawić do bazy danych, używając danych zawartych w tablicy asocjacyjnej par pole / wartość.

Przykład:

$_fields = array('field1'=>'value1','field2'=>'value2','field3'=>'value3');

Wynikowa wstawka SQL powinna wyglądać następująco:

INSERT INTO table (field1,field2,field3) VALUES ('value1','value2','value3');

Wymyśliłem następujący jeden liner PHP:

mysql_query("INSERT INTO table (".implode(',',array_keys($_fields)).") VALUES (".implode(',',array_values($_fields)).")");

Oddziela klucze i wartości tablicy asocjacyjnej iimplodes wygenerować ciąg rozdzielony przecinkami. Problem polega na tym, że nie ucieka ani nie cytuje wartości, które zostały wstawione do bazy danych. Aby zilustrować niebezpieczeństwo, wyobraź sobie, jeśli$_fields zawierał następujące informacje:

$_fields = array('field1'=>"naustyvalue); drop table members; --");

Zostanie wygenerowany następujący kod SQL:

INSERT INTO table (field1) VALUES (naustyvalue); drop table members; --;

Szczęśliwie,wiele zapytań nie jest obsługiwanychNiemniej jednak cytowanie i uciekanie są niezbędne, aby zapobiec lukom w iniekcjach SQL.

Jak piszesz swoje PHP Mysql Inserts?

Uwaga: Zapytania przygotowane przez PDO lub mysqli nie są obecnie dla mnie opcją, ponieważ baza kodowa już intensywnie używa mysql - planowana jest zmiana, ale konwersja zajmie dużo zasobów?

questionAnswers(7)

yourAnswerToTheQuestion