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)
并确保值被转义.
| 归档时间: |
|
| 查看次数: |
14813 次 |
| 最近记录: |