PHP从数据库中检索时截断哈希密码

时间:2013-04-29 15:09:40

标签: php sql odbc 4d-database

我目前在登录系统工作时遇到了一些麻烦,我相信我找到了原因,但我不知道为什么会这样,或者具体是什么导致它。

我有一个存储在数据库中的哈希密码。 password列的值为:

18e2acd33fd3ec752c344b463d00238e35b6b77ed65941f69b9eb96471834f1e507d846071768548f8cf125d6c74ce614d477a576657983bb8620bbc49eed7de

现在我只需在PHP中选择并打印该字段即可:

$query = "SELECT password FROM webusers WHERE username = 'Roy'";
$update = odbc_exec($connect, $query);
$row = odbc_fetch_array($update);
print $row['PASSWORD'];

输出:

18e2acd33fd3ec752c344b463d00238e35b6b77ed65941f69b9eb96471834f1e507d846071768548f8cf125d6c74ce614d477a576657983bb8620bbc49eed7d

滚动到两个哈希的最后,你会看到第二个哈希缺少一个最后的'e',所以这会抛弃我的整个登录系统。为什么会这样?我不确定是否应该责怪PHP或SQL。

我使用的是PHP 5.4.7,数据库是通过ODBC连接的4D SQL服务器。

编辑: password的数据类型为Text,根据4D的手册,该数据类型最多可容纳2GB的数据,因此列大小不是问题。< / p>

1 个答案:

答案 0 :(得分:0)

要确定您的问题是在MySQL还是PHP中,请直接登录MySQL并确定在直接执行SQL命令时是否能够检索完整值。我将使用与PHP相同的SQL查询,以便您可以看到应用程序将看到的MySQL系统的相同输出。如果你在MySQL中看到截断值(PHP不再是图片的一部分),那么你肯定知道你已经超出了你在MySQL中定义的字段的字符限制。同样,如果字符串显示完美,那么PHP必须截断该值。

如果PHP正在截断该值,那么它可能是mysql_result对象的限制,或者它可能是PHP的系统限制,这似乎不太可能。通过进一步缩小问题的位置,您的答案将变得清晰。

我还没见过PHP截断字符串。我在为单个字符串值存储了至少一兆字节的数据,同时为电子邮件制作附件标题。我不相信你的限制在于PHP本地语言。