我正在尝试进行更新查询以更新用户以获取密码。更新声明非常简单,现在让我困惑了大约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());
当我这样做更新Query时,我没有得到任何错误或任何回复。它也只是不更新。
以下是同一代码的另一个演绎:
$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,它回来了“真实”。
当我在$ sql_update上打印时,我得到:
UPDATE users_sensitive SET password = '700b5b23b511d974fe9eeb17ad350b33', ch_password = '700b5b23b511d974fe9eeb17ad350b33' WHERE email_hash = 'ac24dab060a172d8c0b3679d8ae61cac'
这里没有空格。 当我打印$ result_update时,它会出现:1
ANSWER 谢谢bemace,James Anderson,VolkerK,alex和其他人!
问题是代码中有一个奇怪的换行符,创建的空格与数据库上的空格不同。
回溯后,我注意到在本页的代码的最开头,我使用GET从URL中获取哈希值。在测试期间创建变量时,我在变量中添加了一个换行符,仅用于测试目的。我(愚蠢地)在那里留下了断线。在隐藏表单字段中使用该变量时,它包含换行符。
在第一行中脱线之后,所有内容都匹配,一切都很好。
如果您正在阅读本文并计划稍后发布,则发布整个代码可能是值得的。如果我有这个问题,这个问题早就得到了解决。
再次感谢快速反应和解决问题!
答案 0 :(得分:3)
没有错误且没有更新告诉我您的where
子句与任何内容都不匹配。确保$email_hash
没有任何前导或尾随空格,并且没有被截断。
更可能的情况是更新是正在回滚的事务的一部分。
另一种不太可能的可能性:你是否连接到正确的服务器?
答案 1 :(得分:0)
感谢bemace,James Anderson,VolkerK,alex和其他人!
问题是代码中有一个奇怪的换行符,创建的空格与数据库上的空格不同。
回溯后,我注意到在本页的代码的最开头,我使用GET从URL中获取哈希值。在测试期间创建变量时,我在变量中添加了一个换行符,仅用于测试目的。我(愚蠢地)在那里留下了断线。在隐藏表单字段中使用该变量时,它包含换行符。
在第一行中脱线之后,所有内容都匹配,一切都很好。
如果您正在阅读本文并计划稍后发布,则发布整个代码可能是值得的。如果我有这个问题,这个问题早就得到了解决。
再次感谢快速反应和解决问题!