我正在尝试进行更新查询,以更新用户的密码。更新声明是非常容易的,它已经困扰了我大约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());
(别担心,这不是敏感信息)它确实会更新。。。
所以,我假设我的语法是错误的?我知道这些是字符串而不是数字,所以我需要在它们周围加上单引号。我有两个变量,我需要回应,他们都显示了他们应该是什么。我甚至试过在列名周围使用反勾号,但这没有起到任何作用?
我做了一次倒垃圾,结果是“真的”。
当我打印$sql_更新时,我会得到:
UPDATE users_sensitive SET password = '700b5b23b511d974fe9eeb17ad350b33', ch_password = '700b5b23b511d974fe9eeb17ad350b33' WHERE email_hash = 'ac24dab060a172d8c0b3679d8ae61cac'
这里没有空格。
当我打印$result_更新时,它会显示:1
回答
感谢贝梅斯,詹姆斯·安德森,沃尔克,亚历克斯和其他人!
问题是代码中有一个奇怪的换行符,创建的空白与数据库中的空白不同。
在回溯之后,我注意到在我的代码的开头,我使用了一个GET从URL获取散列数。在生成变量时,在测试期间,我为变量添加了换行符,仅用于测试目的。我(愚蠢地)把断线留在那里了。在隐藏窗体字段中使用该变量时,它包括换行符。
从一线突破后,一切都配合好了,一切都很好。
如果你正在阅读本文并计划稍后发布,那么发布整个代码可能是值得的。如果我有这个问题早就解决了。
再次感谢您的快速响应和故障排除!
最佳答案
没有错误和更新告诉我where
子句与任何内容都不匹配。确保$email_hash
没有任何前导或尾随空格,并且没有被截断。
不太可能的情况是,更新是正在回滚的事务的一部分。
另一个不太可能的可能性是:您连接到正确的服务器了吗?