【发布时间】:2013-09-14 17:54:17
【问题描述】:
我真的只是想检查这个语句的语法,并确保它是一个不受 sql 注入的语句。谁能帮我检查一下并告诉我?
$lookupusername= $conn->prepare('SELECT * FROM users WHERE ID =":userId"');
$lookupusername->bindParam(':userId', $userid, PDO::PARAM_STR, 12);
$row = $lookupusername->fetch();
$username = $row['username'];
$usercountry = $row['country'];
if ($username == ""){
header('Location: index.php');
}
还有这样的说法:
$sql = $conn->query('SELECT description, city, status, state, country, needsusername, howmanypeopleneeded, howmanypeoplesignedup, needs.orgname, needs.ID, titleofneed, expiredate, datesubmitted, datetime FROM needs INNER JOIN follow ON follow.followname = needs.needsusername WHERE follow.username=' . $conn->quote($username) . ' AND needs.christmas="0" AND needs.status="posted" ORDER BY datesubmitted DESC');
while ($frows = $sql->fetch()) {
最终代码:
$lookupusername= $conn->prepare('SELECT * FROM users WHERE ID=:userid');
$lookupusername->bindParam(':userid', $userid);
$lookupusername->execute();
$row = $lookupusername->fetch();
$username = $row['username'];
$usercountry = $row['country'];
我没有执行准备好的语句。
【问题讨论】:
-
没有你的代码容易受到 SQL 注入攻击,使用准备好的语句和参数化查询...
-
你能帮我弄清楚第一个语句会受到sql注入的保护吗?
-
请学会使用prepared statements
-
如果你使用来自外界的变量来构建 SQL 语句,那你就错了。 使用 PDO 是不够的。您还必须使用查询参数。
标签: php sql pdo sql-injection