我想实现这个:插入柱变到MySQL根据会话变量
$sql = "INSERT INTO users (location) WHERE social_id='".$_SESSION["FBID"]."' VALUES ('".$_POST["location"]."')";
所以位置值来自于一种形式,但是,显然需要在哪里,因为它需要进入正确的行为用户。 这不起作用,也许有人知道连字符是否放错了位置?
我想实现这个:插入柱变到MySQL根据会话变量
$sql = "INSERT INTO users (location) WHERE social_id='".$_SESSION["FBID"]."' VALUES ('".$_POST["location"]."')";
所以位置值来自于一种形式,但是,显然需要在哪里,因为它需要进入正确的行为用户。 这不起作用,也许有人知道连字符是否放错了位置?
你应该看看这个: MySQL Insert Where query
你不想插入,但更新记录。您始终插入一整行 - 而不是现有行的单个列。你使用更新。因此插入时不需要使用何处。
Lookking你的问题应该是这样的
UPDATE users SET location = $_POST["location"] where social_id = $_SESSION["FBID"]
如上你应该注释中,但是插入之前还是逃脱至少位置变量。
看一看“的mysql准备语句”
感谢您的回复,它的工作原理。什么是“逃避”? – ffritz
表示在SQL语句中使用字符串中的特殊字符,并考虑连接的当前字符集。阅读此链接http://php.net/manual/en/mysqli.real-escape-string.php –
在将其插入数据库之前,您应该先将字符串转义以防止MySQL注入。分配给变量会更容易。
此外,我认为你正在尝试更新行,使用UPDATE查询,而不是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' ";
请随时准备好您的查询,从来没有使用$ _ POST或任何其它用户输入值直接在您的查询,以防止SQL注入。
SQL注入是比较危险的,那么你认为
如果您插入$ _ POST [“所在地”] =“‘’ - ”到@Frank教务长的代码,那么你将UPDATE所有行而不是使用FBID会话密钥的那个。
与SQL注入多个查询
如果已经启用了多查询,则可以插入$ _ POST [“所在地”] =“‘’; DROP TABLE用户 - ”到@Frank教务长的代码,然后您将删除表用户。
始终使用准备好的语句
你可以看看我的PDO实现的例子在GitHub上: https://github.com/maartensch/database-pdo-mysql-class-php
示例代码:
$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变量。首先验证它不是尝试从数据库获取记录的一些不良片段。 你也应该把你的位置在声明的末尾 –
谢谢弗兰克,就是这样。是的,我打算在以后检查,当它工作。 :) – ffritz
开始使用mysqli_prepare语句。 http://php.net/manual/en/mysqli.prepare.php –