PHP mysql 查询插入位置
PHP mysql query insert where
我正在尝试确认用户电子邮件,其中用户验证密钥是变量 $verify_mod
。但是,我得到错误,
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE verification='72b4ad7ee82dd6e177f2588c168abb51user=test123'' at line 1
这是我的查询:
$confirm_query = "INSERT INTO users (confirm_email) VALUES ('1') WHERE verification='$verify_mod'";
你正在做一个插入,这听起来应该是一个更新语句(你不能在插入中做 where 因为它没有意义):
$confirm_query = "UPDATE users set confirm_email=1 WHERE verification='$verify_mod'"
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'";
除此之外,在 table 和列名周围放置 ` 字符总是一个好主意,以降低 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 注入的风险。
扩展@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();
我正在尝试确认用户电子邮件,其中用户验证密钥是变量 $verify_mod
。但是,我得到错误,
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE verification='72b4ad7ee82dd6e177f2588c168abb51user=test123'' at line 1
这是我的查询:
$confirm_query = "INSERT INTO users (confirm_email) VALUES ('1') WHERE verification='$verify_mod'";
你正在做一个插入,这听起来应该是一个更新语句(你不能在插入中做 where 因为它没有意义):
$confirm_query = "UPDATE users set confirm_email=1 WHERE verification='$verify_mod'"
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'";
除此之外,在 table 和列名周围放置 ` 字符总是一个好主意,以降低 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 注入的风险。
扩展@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();