【发布时间】:2010-12-17 04:21:05
【问题描述】:
在 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; --;
幸运的是,multiple queries are not supported,不过引用和转义对于防止 SQL 注入漏洞是必不可少的。
如何编写 PHP Mysql 插入?
注意:PDO 或 mysqli 准备好的查询目前不适合我,因为代码库已经广泛使用 mysql - 计划进行更改,但转换需要大量资源? p>
【问题讨论】:
-
我只是确保在将所有内容添加到字段和值数组之前都已经过验证
-
注意:implode() 将 NULL 转换为空字符串,然后在整数列中变为 0
标签: php sql associative-array