[英]mysqli_real_escape_string with array in php?
我的代码是这样的
public function addQuestions($data){
$ans = array();
$ans[1] = $data['ans1'];
$ans[2] = $data['ans2'];
$ans[3] = $data['ans3'];
$ans[4] = $data['ans4'];
$ans= mysqli_real_escape_string($this->db->link, $data[$ans]);
}
这是在这个sql函数中使用数组的正确方法吗?
由于您希望对数组$ ans的每个元素执行某些操作,因此最适合使用array_map() ,如下所示:
public function addQuestions($data){
$ans = array();
$ans[1] = $data['ans1'];
$ans[2] = $data['ans2'];
$ans[3] = $data['ans3'];
$ans[4] = $data['ans4'];
$escaped_ans = array_map(function( $e ) {
return mysqli_real_escape_string( $this->db->link, $e);
}, $ans );
由于你有一个数组,并且你想在数组的每个元素上使用mysqli_real_escape_string
,你可以使用array_walk()
:
function myescape($val)
{
return mysqli_real_escape_string($val);
}
... 然后
array_walk($ans, 'myescape');
如果您使用MYSQL PDO,则不需要添加“mysqli_real_escape_string”,因为绑定后所有变量都是安全的(来自SQL注入)
我没有足够的声誉评论米兰的帖子,但要注意array_walk,它不会改变你原来的阵列。 对于实际影响阵列的米兰代码,函数必须是
function myescape(&$val) //Note the '&' which calls $val by reference.
{
$val = mysqli_real_escape_string($val);
}
array_walk($ans, 'myescape');
要回答你的问题:
public function addQuestions($data){
$ans = array('',$data['ans1'],$data['ans2'],$data['ans3'],$data['ans4']);
//I would recommend using an object/associative array in this case though, just the way $data is already
$ans_escaped = array_map(function($val) {
return mysqli_real_escape_string($this->db->link, $val);
}, $ans);
//do whatever you need to do with escaped array
}
不过,我的建议是真正研究准备好的陈述。 它可能看起来像你不想打扰的额外工作 - 起初 - 但是一旦你学会它,你将永远不想以任何其他方式去做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.