PHP mysql查询插入哪里

时间:2015-01-07 22:24:26

标签: php mysql mysqli

我尝试确认用户验证密钥为变量$verify_mod的用户电子邮件。但是,我收到了错误,

  

您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便使用正确的语法,以便在' WHERE验证=' 72b4ad7ee82dd6e177f2588c168abb51​​user = test123''在第1行

这是我的疑问:

$confirm_query = "INSERT INTO users (confirm_email) VALUES ('1') WHERE verification='$verify_mod'";

3 个答案:

答案 0 :(得分:3)

INSERT语句不适用于WHERE子句。你要么试图插入一些东西,在这种情况下你应该删除WHERE子句,或者你想修改一个值,在这种情况下你应该使用UPDATE .. SET。

// For an insert:
$confirm_query = "INSERT INTO users (confirm_email) VALUES ('1')";
// For an update:
$confirm_query = "UPDATE users SET confirm_email='1' WHERE verification='$verify_mod'";

除此之外,将`字符放在表和列名称以减少SQL注入的风险总是一个好主意。所以:

// For an insert:
$confirm_query = "INSERT INTO `users` (`confirm_email`) VALUES ('1')";
// For an update:
$confirm_query = "UPDATE `users` SET `confirm_email`='1' WHERE `verification`='$verify_mod'";

最后,我不知道您是否正在使用mysqli_ *函数或PDO或mysql_ *函数(在后一种情况下,由于不推荐使用mysql_ *,因此您肯定会更改为其他函数)。在前两种情况中,您应该使用参数化查询或prepared statements。您准备查询,然后填写变量($verify_mod此处)。这样,变量就可以再次正确转义,以降低SQL注入的风险。

答案 1 :(得分:2)

你正在进行插入,这听起来应该是一个更新声明(你不能在插入中做任何事情,因为它没有意义):

$confirm_query = "UPDATE users set confirm_email=1 WHERE verification='$verify_mod'"

答案 2 :(得分:1)

扩展@CamilStaps答案,这里是如何使用mysqli参数化您的查询。

// For an insert: (No need to bind parameters for this one)
$confirm_query = $mysqli->prepare("INSERT INTO `users` (`confirm_email`) VALUES ('1')");
$confirm_query->execute();
// For an update:
$confirm_query = $mysqli->prepare("UPDATE `users` SET `confirm_email`='1' WHERE `verification`= ? ");
$confirm_query->bind_param('s', $verify_mod); 
$confirm_query->execute();