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インサートをどのように記述しますか?
注:コードベースはすでにmysqlを広範囲に使用しているため、PDOまたはmysqliで準備されたクエリは現在のところオプションではありません-変更が計画されていますが、変換するには多くのリソースが必要ですか?