我有几个关于参数化查询的基本问题
考虑这段代码:
$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)
演员表)不安全的情况? - 第二段代码可以吗还是我也应该
$_GET['id']
转换为int? - 第二段代码是否有任何已知的漏洞?也就是说,如果我使用第二个查询,是否可以进行 SQL 攻击?