Php 根据会话变量将POST变量插入Mysql

Php 根据会话变量将POST变量插入Mysql,php,mysql,Php,Mysql,我正在尝试实现这一点: $sql = "INSERT INTO users (location) WHERE social_id='".$_SESSION["FBID"]."' VALUES ('".$_POST["location"]."')"; 因此位置值来自一个表单,然而,WHERE显然是必需的,因为它需要为用户进入正确的行。 这行不通,也许有人知道连字符是否放错地方了 在将字符串插入数据库之前,应该对其进行转义,以防止MySQL注入。将其分配给变量会更容易 另外,我认为您正在尝试更新行

我正在尝试实现这一点:

$sql = "INSERT INTO users (location) WHERE social_id='".$_SESSION["FBID"]."' VALUES ('".$_POST["location"]."')";
因此位置值来自一个表单,然而,WHERE显然是必需的,因为它需要为用户进入正确的行。
这行不通,也许有人知道连字符是否放错地方了

在将字符串插入数据库之前,应该对其进行转义,以防止MySQL注入。将其分配给变量会更容易

另外,我认为您正在尝试更新行,请使用update query而不是INSERT

$FBID = mysqli_real_escape_string($conn, $_SESSION["FBID"])
$location = mysqli_real_escape_string($conn, $_POST["location"])

$sql = "UPDATE `users` SET `location` =  '$location' WHERE `social_id`='$FBID' ";

你应该看看这个:

您不想插入,但要更新记录。始终插入完整的行,而不是现有行的单个列。你可以使用update。因此,插入时不需要使用where

看看你的问题应该是这样的

UPDATE users SET location = $_POST["location"] where social_id = $_SESSION["FBID"]
但是,正如上面的注释所述,在插入位置变量之前,您至少应该转义它


查看“mysql准备好的语句”

请始终准备您的查询,切勿在查询中直接使用$\u POST或任何其他用户输入值来防止SQL注入

SQL注入比您想象的更危险

如果在@Frank Provost的代码中插入$_POST[“location”]=“''--”,则将更新所有行,而不是使用FBID会话键的行

使用SQL注入的多个查询

如果启用了多查询,则可以在@Frank Provost的代码中插入$_POST[“location”]=“DROP TABLE users--”,然后删除表用户

始终使用事先准备好的语句

您可以在GitHub上查看我的PDO实现示例:

示例代码:

$sql = "INSERT INTO yourTablename(id,name) VALUES(:id,:name)";
$userInputId = 'yourUnescapedValue';
$userInputName = 'yourUnescapedValue';
$preparedStatements = array(':id'=>$userInputId,':name'=>$userInputName);
Db::getDb()->query($sql,$preparedStatements);

您确定要插入吗?用户表是否只包含一个位置?我想你需要更新一下,是吗?您也不应该直接插入POST变量。首先,验证它是否是试图从数据库中获取记录的错误代码段。你也应该把你的位置放在声明的末尾谢谢,弗兰克,就这样。是的,我计划稍后在它工作时检查它。:)开始使用mysqli_prepare语句。谢谢你的回复,它很有效。“转义”是什么意思?指转义字符串中的特殊字符,以便在SQL语句中使用,同时考虑连接的当前字符集。请阅读此链接谢谢,我实际上是在将变量传递给另一个文件中的函数。那么,是否应该在函数中进行转义呢?或者在if-isset中调用函数?@FelixF。不客气!两者都可以,不过在将其传递到函数之前对其进行转义会更容易。