Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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
无法检索MYSQL中已使用Password()的行_Mysql - Fatal编程技术网

无法检索MYSQL中已使用Password()的行

无法检索MYSQL中已使用Password()的行,mysql,Mysql,我正在使用PASSWORD()散列我的密码。我知道这不是一种首选方法,也可能不太安全,但我仍在将其用于一些几乎不需要任何安全性的应用程序。因此,我的insert语句如下所示: INSERT into AUTH(id,pass) VALUES ('myUserName', PASSWORD('myPass')); 我已验证myPass现在已哈希化 现在,我正在尝试获取密码设置为myPass的行数。我已尝试使用以下查询,但继续得到0计数: SELECT COUNT(*) FROM AUTH whe

我正在使用PASSWORD()散列我的密码。我知道这不是一种首选方法,也可能不太安全,但我仍在将其用于一些几乎不需要任何安全性的应用程序。因此,我的insert语句如下所示:

INSERT into AUTH(id,pass) VALUES ('myUserName', PASSWORD('myPass'));
我已验证myPass现在已哈希化

现在,我正在尝试获取密码设置为myPass的行数。我已尝试使用以下查询,但继续得到0计数:

SELECT COUNT(*) FROM AUTH where pass=PASSWORD('myPass');

有什么建议吗?

请验证
AUTH
表中的
pass
列是否至少包含41个字符,或者是否返回了以下值:

SELECT LENGTH(PASSWORD('foo'))
LENGTH(PASSWORD('foo'))  
-------------------------
                       41
此测试用例演示了当
authbad
表中的
pass
列不够大,无法容纳整个密码字符串时发生的情况:

 CREATE TABLE auth (id VARCHAR(32), pass VARCHAR(41));  // pass column matches length
 INSERT INTO auth VALUES ('abc',PASSWORD('abc'));

 CREATE TABLE authbad (id VARCHAR(32), pass VARCHAR(32));  // pass column too short
 INSERT INTO authbad VALUES ('abc',PASSWORD('abc'));

 SELECT COUNT(1) FROM auth WHERE pass=PASSWORD('abc');
 COUNT(1)  
 ----------
          1

 SELECT COUNT(1) FROM authbad WHERE pass=PASSWORD('abc');
 COUNT(1)  
 ----------
          0


另一个(不太可能的)问题是,字符集转换正在插入或选择上进行,而在另一个插入或选择中没有发生。考虑到密码返回的是星号和十六进制数字(大写),我并不认为这是一个问题。

我无法用这些精确的查询重现这个问题。所以:要么变量不完全相同(注意空格),要么插入失败(可能是双id?)。mysql文档建议不要对应用程序使用密码。我已经验证了插入是否有效。当你说你不能重现问题时,这是否意味着你得到了正确的计数?i、 e.非零count@Newcoder您验证了整个密码字符串是否被存储,并且没有被截断?注意,如文件所示:“该函数由MySQL服务器中的身份验证系统使用;您不应该在自己的应用程序中使用它。为此,考虑或替代。”验证上述解决方案是否有效。pass由32个字符定义。改为41,现在可以用了。非常感谢您的帮助。如果您发现我的答案解决了您的问题,您可以“接受”答案。有些人不愿意回答不接受答案的成员提出的新问题。