【问题标题】:Update MySQL Data with a GET variable使用 GET 变量更新 MySQL 数据
【发布时间】: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 注入,但我没有在这里发布整个代码。

标签: php mysql get


【解决方案1】:

使用准备好的语句:

$stmt = mysqli_prepare($sql, "UPDATE `users` SET `active` = 1 WHERE `email` = ?") or die(mysqli_error($sql));
mysqli_bind_param($stmt, "s", $_GET['email']);
mysqli_stmt_execute($stmt) or die(mysqli_error($sql));

【讨论】:

    【解决方案2】:
    $set_active = "UPDATE `users` SET `active` = 1 WHERE `email` = '".$_GET['email']."'";
    

    您在电子邮件中错过了'。所以查询是错误的。检查这样做:

    echo("UPDATE `users` SET `active` = 1 WHERE `email` = ".$_GET['email']."");
    

    这会给你一个错误。

    【讨论】:

      【解决方案3】:

      用双引号而不是单引号评估事物

      改变

      set_active = "UPDATE `users` SET `active` = 1 WHERE `email` = ".$_GET['email']."";
      

      set_active = "UPDATE `users` SET `active` = 1 WHERE `email` = '".$_GET['email']."'";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 2011-10-09
        • 1970-01-01
        • 2013-06-17
        • 1970-01-01
        • 2015-11-24
        相关资源
        最近更新 更多