我有一个以前似乎有效的登录脚本,但现在对某些用户无效,包括一些以前有效的用户。
SQL 在 phpMyAdmin 中始终有效,但在某些用户的网页上它总是返回零行。这是有问题的代码:
$query_str = 'SELECT id, username, level_access, active FROM users WHERE username = "';
$query_str .= mysql_real_escape_string($uname).'"';
$query_str .= ' AND password = "'.mysql_real_escape_string($pwd).'"';
echo $query_str. "<br/>";
$result = mysql_query($query_str);
$num_result = mysql_num_rows($result);
echo $num_result. "<br/>";
我花了相当多的时间来测试我能想到的任何变体和组合,我添加了反引号、更改了变量名、插入了其他变量、简化了表达式。我在 phpMyAdmin 中测试了输出的查询语句的每个更改。我添加了其他用户、删除了用户并重新创建了他们,我更改了访问级别和用户名。
我总是得到相同的结果,对于某些用户来说,登录总是对其他用户有效,它总是不返回任何行,即使它们在 phpMyAdmin 中返回也是如此
最后,我删除了 where 语句,以便创建以下 SQL 语句:
$query_str = 'SELECT id, username, level_access, active FROM users';
在我的网页中,无论有多少用户,它总是返回 8 行。如果有 8、9 或 10 个用户,则返回 8 行。我删除了用户,所以用户少于8个,但网页phpMyAdmin仍然有8行返回,每次都返回正确的数字。
很明显问题不是代码。所以这超出了我的专业范围。是什么导致了这个问题,我该如何解决?
最佳答案
您的 MySQL 缓存设置是什么?当数据库中的行少于 8 行时返回 8 行听起来像是在缓存查询的旧结果给我。您可以通过在 SELECT
语句之后添加 SQL_NO_CACHE
来禁用缓存,将查询更改为 $query_str = 'SELECT SQL_NO_CACHE id, username, level_access, active FROM用户的;
帮助 ?
关于php - SQL 在 phpMyAdmin 中有效,但在网页脚本中返回错误的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8146073/