パラメータ化されたクエリに関するいくつかの基本的な質問があります
次のコードを検討してください。
$id = (int)$_GET['id'];
mysql_query("UPDATE table SET field=1 WHERE id=".$id);
パラメータ化されたクエリを使用して同じことを行う
$sql = "UPDATE table SET field=1 WHERE id=?";
$q = $db->prepare($sql);
$q->execute(array($_GET['id']));
私の質問は次のとおりです。
- 最初のコード (
(int)
キャストを含む) が安全でない状況はありますか? - コードの 2 番目の部分は問題ありません
$_GET['id']
か、それとも int にキャストする必要がありますか? - 2 番目のコードに既知の脆弱性はありますか? つまり、2 番目のクエリを使用している場合、SQL 攻撃を行う方法はありますか?