簡體   English   中英

mysqli_real_escape_string與php中的數組?

[英]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注入)

http://php.net/manual/en/pdostatement.bindparam.php

我沒有足夠的聲譽評論米蘭的帖子,但要注意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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM