Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这个update语句缺少什么吗?_Php_Mysql_Mysqli - Fatal编程技术网

Php 这个update语句缺少什么吗?

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=

我已经建立了一个数据库,其中存储了电子邮件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);

虽然我成功地得到了所有的表单值,直到,除非我加入了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,我不同意你的第一个评论。当有几个潜在问题可能导致问题中提到的问题时,提及它们是一件好事。在许多情况下(包括)这一方法,有助于解决问题。你的第二个评论是幼儿园水平,我宁愿不回答评论达到这个水平。@普拉弗勒米斯拉,你能告诉我们什么是问题,什么是解决方案?而且,如果你相信我的帖子解决了这个问题,你可以考虑接受它作为正确的答案。