此更新声明是否缺少某些内容?

时间:2015-08-16 08:55:39

标签: php mysql mysqli

我创建了一个数据库,其中存储了电子邮件ID和相应的名称和密码。我已成功获取表单的数据..用户输入更新的名称和密码。但问题出现在查询中,如下所示

$db = mysqli_connect(all details)...
$name = $_POST['name'];
$password = $_POST['password']:
$email = $_POST['email'];

$query = "UPDATE mytable SET name='$name',password='$password' WHERE emailid='$email'";
$result = mysqli_query($db,$query);

虽然我成功地获得了所有形式的价值,直到并且除非我把“'从句。它工作。但显然更新所有值。我希望它能在哪里工作..但到目前为止不成功:(

2 个答案:

答案 0 :(得分:0)

如果变量被'

包围,则需要在变量周围添加 {}

所以你的查询应该是这样的

$query = "UPDATE mytable SET name='{$name}',password='{$password}' WHERE emailid='{$email}'";
$result = mysqli_query($db,$query);

编辑:也在将数据保存到数据库之前确保过滤并验证数据

答案 1 :(得分:-1)

您需要确保emailid中存在mytable,您确实希望按此过滤,并且在您的数据库方案中,它具有支持发布数据的类型。您似乎正在发送字符串,例如'foo@bar.lorem',而您的emailidint或数据库方案中的某些内容。通过运行

进行检查
desc mytable;

如果你在它们周围使用撇号,你需要在变量周围加上大括号,但是作为一种风格问题,我喜欢关闭字符串并将$variable附加.,因为这种编码风格是亲自接近我。

如果一切都失败了,看看生成了什么,通过回显查询字符串,尝试直接运行,查看错误是什么并修复直到......

......直到它被修复。

此外,您不加密密码,您的代码也容易受到SQL注入攻击。请阅读password encryptionSQL injection,然后保护您的项目免受这些危险。