3

我目前在让登录系统正常工作时遇到了一些麻烦,我相信我已经找到了原因,尽管我不知道它为什么会发生或具体是什么原因造成的。

我有一个存储在数据库中的散列密码。该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根据 4D的手册,数据类型Text最多可以容纳 2GB 的数据,因此列大小不是问题。

4

1 回答 1

0

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

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

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

于 2013-05-14T21:16:54.367 回答