1:php在重写mysql的插入insert函数的使用,接受一个参数是$data为一个关联数组,键是数据库表字段,值是字段对应的值。
我们使用array_keys()函数获取所有的键组成一个新的数组。
使用array_values()函数获取所有的值组成一个新的数组。
这里就有一个问题了,我们的sql拼接的时候需要将每一个键也就是表字段加上反引号(`
字段`),给所有的值也就是表字段的值加上引号('值')。用来确保数据的安全。
这里我们使用php的array_walk()函数。
这个函数的用法是:
对数组中的每个元素应用用户自定义函数:
function myfunction($value,$key) {
echo "The key $key has the value $value
";
}
$a=array("a"=>"red","b"=>"green","c"=>"blue");
array_walk($a,"myfunction");
这个示例返回的结果是:
The key a has the value red
The key b has the value green
The key c has the value blue
对数组执行用户自定义的函数。
2:运用到我们自己的需求上:
我们定义两个函数:
**
* 对字段两边加反引号,以保证数据库安全
* @param $value 数组值
*
public
function add_special_char(&$value) {
if('*' ==
$value || false !== strpos($value, '(') || false !== strpos($value,
'.') || false !== strpos ( $value, '`')) {
//不处理包含* 或者
使用了sql方法。
} else
{
$value =
'`'.trim($value).'`';
}
if
(preg_match("/\b(select|insert|update|delete)\b/i", $value))
{
$value =
preg_replace("/\b(select|insert|update|delete)\b/i", '',
$value);
}
return
$value;
}
**
* 对字段值两边加引号,以保证数据库安全
* @param $value 数组值
* @param $key 数组key
* @param $quotation
*
public
function escape_string(&$value, $key='', $quotation = 1)
{
if
($quotation) {
$q =
'\'';
} else
{
$q =
'';
}
$value =
$q.$value.$q;
return
$value;
}
使用方法:
array_walk($fields, array($this, 'add_special_char'));
array_walk($values, array($this, 'escape_string'));
这样就可以将字段加上反引号,将值加上引号