標準の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);
}