根据SESSION变量将POST变量插入Mysql

时间:2016-04-24 11:01:53

标签: php mysql

我正在努力实现这个:

$sql = "INSERT INTO users (location) WHERE social_id='".$_SESSION["FBID"]."' VALUES ('".$_POST["location"]."')";

因此,Location值来自一个表单,但显然需要WHERE,因为它需要进入用户的正确行。 这不起作用,也许有人知道连字符是否错位?

3 个答案:

答案 0 :(得分:2)

你应该看看这个: MySQL Insert Where query

您不想插入,而是更新记录。您始终插入完整的行 - 而不是现有行的单个列。你使用更新。因此,插入时无需使用。

看看你的问题应该是

UPDATE users SET location = $_POST["location"] where social_id = $_SESSION["FBID"]

正如上面的评论所述,你应该在插入之前至少逃避位置变量。

看看“mysql prepared statements”

答案 1 :(得分:1)

您应该在将字符串插入数据库之前将其转义以防止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' ";

答案 2 :(得分:0)

请始终准备您的查询,不要在查询中直接使用$ _POST或任何其他用户输入值来阻止SQL注入。

SQL注入比您想象的更危险

如果你插入$ _POST [" location"] ="'' - "进入@Frank Provost的代码后,您将更新所有行而不是具有FBID会话密钥的行。

使用SQL注入的多个查询

如果您启用了多个查询,则可以插入$ _POST [" location"] ="'' DROP TABLE用户 - "进入@Frank Provost的代码,然后你将 DROP表用户

始终使用准备好的陈述

您可以在GitHub上查看我的PDO实现示例: 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);