Php 这个update语句缺少什么吗?
我已经建立了一个数据库,其中存储了电子邮件id以及相应的名称和密码。我已成功获取表单的数据。。用户在其中输入更新的名称和密码。但是问题出现在查询中,如下所示Php 这个update语句缺少什么吗?,php,mysql,mysqli,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=
$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);
虽然我成功地得到了所有的表单值,直到,除非我加入了where子句。它是有效的。但是很明显,它会更新所有的值。我希望它与where.一起工作,但到目前为止没有成功:(如果变量被引号'包围,则需要在变量周围放置{}) 所以您的查询应该如下所示
$query = "UPDATE mytable SET name='{$name}',password='{$password}' WHERE emailid='{$email}'";
$result = mysqli_query($db,$query);
编辑:在将数据保存到数据库之前,请确保筛选和验证数据您可以将您的语句编写为: $query=“UPDATE mytable SET name=”“$name.”,password=”“$password.”,其中emailid=”“$email.”
使用.as字符串连接运算符您需要确保
emailid
存在于mytable
中,您确实希望通过它进行筛选,并且在您的数据库方案中,它有一个支持发布数据的类型。似乎您正在发送字符串,如'foo@bar.lorem“
和您的电子邮件ID
是int
或数据库方案中的某个内容。通过运行
desc mytable;
如果在变量周围使用撇号,则需要在变量周围放上花括号,但作为一种风格,我喜欢关闭字符串并用
附加$variable
,因为这种编码风格更接近我个人
如果一切都失败了,通过回显查询字符串,查看生成了什么,尝试直接运行,查看错误并修复,直到
…直到它被修复
此外,您不加密密码,而且您的代码也容易受到SQL注入的攻击。请阅读并保护您的项目免受这些危险。So echo$query;然后查看如何使用未弃用的API,如mysqli/PDO,以及在$query之前设置的准备语句
var_dump($email);die();.mytable中**$email**的值是多少?
在emailid列中存在此值。MySQL服务器响应所有查询,即使出现问题。您需要检查服务器的响应,因为它通过其函数准确地告诉您问题所在。当变量被引号包围时,不需要大括号。大括号在变量名后面有字母(变量名可能会被误解)。注意:您的答案本身并没有解决问题,它解决了一个附带问题,它应该是一个注释而不是答案。它不适用于where子句,因为电子邮件id不匹配…通过放置{}@mihaiI我保证“WHERE emailid='{$email}'”===“WHERE emailid='$email'”
撇号不需要在变量周围使用大括号。只有当变量后面紧跟字母、数字或下划线(如)时,才需要在变量周围使用大括号{$product}s”!==“$products”
或者当变量是一个对象时,需要从对象调用方法,例如“{$product->getPrice()}”
。我也喜欢连接,因为代码的意图更清晰,更容易调试。在上述情况下,如果您有许多项要连接,sprintf
将更易于使用。另一方面,使用准备好的语句看起来和感觉上都像sprintf
,但有许多优点,例如防范SQL注入。注意:你的答案并没有解决问题本身,而是解决了一个附带问题,它应该是一个评论而不是答案。与其盲目尝试各种不同的事情“可能解决问题,也可能无法解决问题”,不如调查问题是什么?询问MySQL服务器“我上次查询时为什么返回false”总是有效的,MySQL服务器会告诉你“你使用了一个我不知道的列”或“你使用了一个我不知道的表”或“你的查询中有一个语法错误”。嘿,thanx..虽然花括号没有帮助,但你打印查询的想法很有帮助..n现在成功了:)@MihaiStancu,我不同意你的第一个评论。当有几个潜在问题可能导致问题中提到的问题时,提及它们是一件好事。在许多情况下(包括)这一方法,有助于解决问题。你的第二个评论是幼儿园水平,我宁愿不回答评论达到这个水平。@普拉弗勒米斯拉,你能告诉我们什么是问题,什么是解决方案?而且,如果你相信我的帖子解决了这个问题,你可以考虑接受它作为正确的答案。