如何使用关联数组编写好的PHP数据库插入

Tom*_*Tom 11 php sql associative-array

在PHP中,我想使用包含在字段/值对的关联数组中的数据插入到数据库中.

例:

$_fields = array('field1'=>'value1','field2'=>'value2','field3'=>'value3');
Run Code Online (Sandbox Code Playgroud)

生成的SQL插入应如下所示:

INSERT INTO table (field1,field2,field3) VALUES ('value1','value2','value3');
Run Code Online (Sandbox Code Playgroud)

我想出了以下PHP单行代码:

mysql_query("INSERT INTO table (".implode(',',array_keys($_fields)).") VALUES (".implode(',',array_values($_fields)).")");
Run Code Online (Sandbox Code Playgroud)

它分离关联数组的键和值,并implodes生成逗号分隔的字符串.问题是它不会转义或引用插入数据库的值.为了说明危险,想象一下如果$_fields包含以下内容:

$_fields = array('field1'=>"naustyvalue); drop table members; --");
Run Code Online (Sandbox Code Playgroud)

将生成以下SQL:

INSERT INTO table (field1) VALUES (naustyvalue); drop table members; --;
Run Code Online (Sandbox Code Playgroud)

幸运的是,不支持多个查询,但引用和转义对于防止SQL注入漏洞至关重要.

你如何编写PHP Mysql插件?

注意:PDO或mysqli的准备查询当前不适合我的选择,因为代码库已经使用广泛的MySQL - 改变计划,但它会采取很多资源的转换?

Gal*_*len 22

我唯一想改变的就是使用sprintf来实现可读性

$sql = sprintf(
    'INSERT INTO table (%s) VALUES ("%s")',
    implode(',',array_keys($_fields)),
    implode('","',array_values($_fields))
);
mysql_query($sql);
Run Code Online (Sandbox Code Playgroud)

并确保值被转义.