我正在尝试进行更新查询来更新用户以拥有密码。更新语句非常简单,现在已经让我困惑了大约 12 个小时。
我已经在 3.5 页的 google 搜索中阅读了与此相关的所有内容。但由于某种原因,这些建议都不适合我!
这是“原始”形式的 UPDATE 查询:
$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_dump,它返回“true”。
当我在 $sql_update 上进行打印时,我得到:
UPDATE users_sensitive SET password = '700b5b23b511d974fe9eeb17ad350b33', ch_password = '700b5b23b511d974fe9eeb17ad350b33' WHERE email_hash = 'ac24dab060a172d8c0b3679d8ae61cac'
这里没有空格。 当我打印 $result_update 时,它会显示: 1
回答 感谢 bemace、James Anderson、VolkerK、alex 和其他人!
问题是代码中存在一个奇怪的换行符,创建的空格与数据库中的空格不同。
回溯之后,我注意到在本页代码的最开始处,我使用了 GET 从 URL 中获取哈希值。在创建变量时,在测试期间,我向变量添加了换行符,仅用于测试目的。我(愚蠢地)把换行符留在那里。在隐藏表单字段中使用该变量时,它包含换行符。
从第一行中取出换行符后,一切都匹配了,一切都很好。
如果您正在阅读本文并计划稍后发布,那么发布整个代码可能是值得的。如果我这样做的话,这个问题就会更早得到解决。
再次感谢您的快速响应和故障排除!
最佳答案
没有错误也没有更新告诉我您的 where
子句不匹配任何内容。确保 $email_hash
没有任何前导或尾随空格,并且没有被截断。
不太可能的情况是更新是正在回滚的事务的一部分。
另一种不太可能的可能性:您是否连接到了正确的服务器?
关于PHP SQL UPDATE 坏了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6516199/