0

標準のINSERTを実行する次のコードがあります。この関数を同じように書き直すにはどうすればよいですか。

$this->db->query($query)

このコードはSQLインジェクションに対して非常に脆弱であるように思われるため、プリペアドステートメントを使用して同じことができるようにしたいと思います。コードは次のとおりです。

    private function insert($table, $arr){

        $query = "INSERT INTO " . $table . " (";
        $pref = "";

        foreach ($arr as $key => $value) {
                $query .= $pref . $key;
                $pref = ", ";
            }
            $query .= ") VALUES (";
            $pref = "";
            foreach ($arr as $key => $value) {
                $query .= $pref. "'" . $value . "'";
                $pref = ", ";
            }
            $query = .= ");";
            return $this->db->query($query);
    }

PDOを使用してmysqlに接続しています。

EDİT:私は問題なく動作する次のコードを書きました。

private function insert($table, $arr){

    $query = "INSERT INTO " . $table . " (";
    $pref = "";

    foreach ($arr as $key => $value) {
            $query .= $pref . $key;
            $pref = ", ";
        }
        $query .= ") VALUES (";
        $pref = "";
        foreach ($arr as $key => $value) {
            $query .= $pref. ":" . $key ;
            $pref = ", ";
        }
        $query .= ");";
        $result = $this->db->prepare($query);
        $result->execute($arr);
}
4

1 に答える 1

0

http://www.php.net/manual/en/pdo.prepare.php例1から、次のようなものを試してください。

private function insert($table, $arr){

    $query = "INSERT INTO " . $table . " (";
    $pref = "";

    foreach ($arr as $key => $value) {
            $query .= $pref . $key;
            $pref = ", ";
        }
        $query .= ") VALUES (";
        $pref = "";
        foreach ($arr as $key => $value) {
            $query .= $pref. ":" . $key;
            $pref = ", ";
        }
        $query = .= ")";
        $this->db->prepare($query);
        $this->db->execute($arr);

}
于 2013-03-14T22:16:25.033 に答える