Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.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/68.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 SQL更新失败?_Php_Mysql - Fatal编程技术网

PHP SQL更新失败?

PHP SQL更新失败?,php,mysql,Php,Mysql,我正在尝试进行更新查询,以更新用户的密码。update语句非常简单,它已经困扰了我大约12个小时了 我已经在谷歌3.5页的搜索页面上阅读了所有与此相关的内容。但出于某种原因,这些建议对我都不管用 以下是“原始”形式的更新查询: $sql_update = "UPDATE users_sensitive SET password = '$password_hash', ch_password = '$password_hash' WHERE email_hash = '$email_hash'";

我正在尝试进行更新查询,以更新用户的密码。update语句非常简单,它已经困扰了我大约12个小时了

我已经在谷歌3.5页的搜索页面上阅读了所有与此相关的内容。但出于某种原因,这些建议对我都不管用

以下是“原始”形式的更新查询:

$sql_update = "UPDATE users_sensitive SET password = '$password_hash', ch_password = '$password_hash' WHERE email_hash = '$email_hash'";
$result_update = mysql_query($sql_update) or die(mysql_error());
当我执行此更新查询时,没有收到任何错误或任何回复。它也只是不更新

下面是同一代码的另一个格式副本:

$sql_update = "UPDATE users_sensitive SET password = '" . $password_hash . "', ch_password = '" . $password_hash. "' WHERE email_hash = '" . $email_hash . "'";
$result_update = mysql_query($sql_update) or die(mysql_error());
同样,什么也没发生

当我在这里输入实际数字而不是php变量时:

$sql_update = "UPDATE users_sensitive SET password = '700b5b23b511d974fe9eeb17ad350b33', ch_password = '700b5b23b511d974fe9eeb17ad350b33' WHERE email_hash = 'ac24dab060a172d8c0b3679d8ae61cac'";
$result_update = mysql_query($sql_update) or die(mysql_error());
(别担心,这不是敏感信息)它确实会更新

那么,我假设我的语法是错误的?我知道这些是字符串而不仅仅是数字,所以我需要在它们周围加上单引号。我有两个我需要的变量,它们都显示了它们应该是什么。我甚至尝试在列名周围使用反勾号,但那没有任何作用


我做了一个var_转储,结果是“真的”

当我在$sql\u更新上打印时,我得到:

UPDATE users_sensitive SET password = '700b5b23b511d974fe9eeb17ad350b33', ch_password = '700b5b23b511d974fe9eeb17ad350b33' WHERE email_hash = 'ac24dab060a172d8c0b3679d8ae61cac'
这里没有空格。 当我打印$result\u更新时,它会显示:1

回答 感谢贝梅斯、詹姆斯·安德森、沃尔克、亚历克斯和其他人

问题是代码中有一个奇怪的换行符,它创建的空格与数据库中的空格不同

回溯之后,我注意到在这个页面上我的代码的最开始,我使用了一个GET从URL中获取一个散列数。在生成变量时,在测试期间,我在变量中添加了一个换行符,仅用于测试目的。我(愚蠢地)把断线留在那里了。在隐藏表单字段中使用该变量时,它包含换行符

从第一条线突破后,一切都匹配,一切都很好

如果您正在阅读本文并计划稍后发布,那么发布整个代码可能是值得的。如果我有,这个问题早就解决了


再次感谢您的快速响应和故障排除

无错误和无更新告诉我您的
where
子句与任何内容都不匹配。确保
$email\u hash
没有任何前导或尾随空格,并且没有被截断

不太可能的情况是更新是正在回滚的事务的一部分


另一个不太可能发生的情况是:您连接到了正确的服务器吗?

感谢bemace、James Anderson、VolkerK、alex和其他人

问题是代码中有一个奇怪的换行符,它创建的空格与数据库中的空格不同

回溯之后,我注意到在这个页面上我的代码的最开始,我使用了一个GET从URL中获取一个散列数。在生成变量时,在测试期间,我在变量中添加了一个换行符,仅用于测试目的。我(愚蠢地)把断线留在那里了。在隐藏表单字段中使用该变量时,它包含换行符

从第一条线突破后,一切都匹配,一切都很好

如果您正在阅读本文并计划稍后发布,那么发布整个代码可能是值得的。如果我有,这个问题早就解决了


再次感谢您的快速响应和故障排除

在插入变量之前,您已经对这些变量使用了
mysql\u real\u escape\u string()
?您是否检查了where条件中的变量以满足您的期望?它说的是
var\u dump($result\u update)
?您是否打印出了
$sql\u update
,而不仅仅是这些变量?
$result\u update
包含哪些内容(true?)?
mysql\u-impacted\u rows()
怎么说?试试
var\u转储($sql\u-update)
也许吧?我做了一次var\u转储,结果返回“true”。当我在$sql_更新上打印时,我得到:update users_sensitive SET password='700b5b23b511d974fe9eeb17ad350b33',ch_password='700b5b23b511d974fe9eeb17ad350b33',其中email_hash='ac24dab060a172d8c0b3679d8ae61cac'-这里没有空格。当我打印$result\u更新时,它会显示:1从用户中选择*会发生什么情况,其中email\u hash=“$email\u hash”?从我的快速测试中,什么都不会发生。。。我的代码是:
$sql\u select=“select*FROM users\u sensitive WHERE email\u hash='$email\u hash';$result\u select=mysql\u query($sql\u select);回声“test1”;而($row=mysql\u fetch\u array($result\u select)){echo$user\u sensitive\u id=$row['user\u sensitive\u id'];echo$user\u id=$row['user\u id'];echo“test”;}
我只收到“test1”,就好像它没有看到电子邮件一样。我检查了多次,数据库中存在电子邮件哈希@Nathan-那么我们回到
where
子句,它与任何内容都不匹配。您确定phpMyAdmin或您用来检查表的任何东西与您的php代码连接到同一服务器和数据库吗?还有,是的,我在脚本外部包含了一个数据库连接。每个页面连接完全相同,所有页面都正常工作。在检查数据库名称后,一切都是一样的。顺便说一句,我刚刚加入,所以我在这篇文章中获得的所有酷奖都必须重新设置!我是内森,谢谢你的帮助!