PHP mysql 查询插入在哪里


PHP mysql query insert where

我正在尝试确认用户电子邮件,其中用户验证密钥是变量$verify_mod。但是,我收到错误,

您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行的"WHERE verification="72b4ad7ee82dd6e177f2588c168abb51user=test123"附近使用的正确语法

这是我的查询:

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

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

// 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_*已被弃用)。在前两种情况下,都应使用参数化查询或预准备语句。准备查询,然后填写变量(此处$verify_mod)。这样,变量就可以正确转义,再次降低SQL注入的风险。

您正在执行插入,这听起来应该是一个更新语句(您也不能在插入中的位置,因为它没有意义):

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

扩展@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();