6

PDOのプリペアドステートメントが正しくあることを確認する必要がありますが、次のコードはSQLインジェクションによって保護されますか?

$data['username'] = $username;
$data['password'] = $password;
$data['salt'] = $this->generate_salt();
$data['email'] = $email;

$sth = $this->db->prepare("INSERT INTO `user` (username, password, salt, email, created) VALUES (:username, :password, :salt, :email, NOW())");  
$sth->execute($data);
4

2 に答える 2

7

はい、あなたのコードは安全です。ただし、短縮することができます。

$data = array( $username, $password, $this->generate_salt(), $email );

// If you don't want to do anything with the returned value:
$this->db->prepare("
    INSERT INTO `user` (username, password, salt, email, created)
    VALUES (?, ?, ?, ?, NOW())
")->execute($data);
于 2012-05-06T16:09:16.420 に答える
1

あなたはあなたの$dataようなもののために空の配列から始めることができます

// start with an fresh array for data
$data = array();

// imagine your code here

これまでのところ、コードは良さそうです。

編集:私はあなたのNOW()呼び出しを逃しました。私見あなたはそれをバインド変数と一緒に追加する必要があります

// bind date
$data['created'] = date("Y-m-d H:i:s");

// updated prepare statement
$sth = $this->db->prepare("INSERT INTO `user` (username, password, salt, email, created) VALUES (:username, :password, :salt, :email, :created)");
于 2012-05-06T16:06:06.460 に答える