【发布时间】:2013-10-25 19:45:16
【问题描述】:
我创建了一个小的登录结构:
如果您已将数据写入字段,您会收到一个用于确认帐户的链接。 例如确认.php?email=a@a.com 当您访问该链接时,将执行以下代码:
$sql = mysqli_connect("localhost", "name", "password");
mysqli_select_db($sql, "db");
$set_active = "UPDATE `users` SET `active` = 1 WHERE `email` = ".$_GET['email']."";
mysqli_query($sql, $set_active);
mysqli_close($sql);
但在那之后,active-value 仍然是 0,就像默认一样。
用户表: 电子邮件 (varchar 100) 活动 (int 1) a@a.com 0
【问题讨论】:
-
Prefable:使用带有占位符的准备好的语句。否则,您需要在值周围加上引号,并且还应该使用
mysqli_real_escape_string来防止 SQL 注入。 -
user mysqli_error() 你会发现确切的错误
-
您的电子邮件变量没有引号。尝试将其更改为
'" . $_GET['email'] . "'';此外,您应该使用带有 MySqli 或 PDO 的准备好的语句。 -
remove " 最后你的查询一个是多余的
-
感谢凯尔,现在它可以工作了。我也阻止了 SQL 注入,但我没有在这里发布整个代码。