我有一个以前似乎有用的登录脚本,但现在不适用于某些用户,包括以前工作过的用户。
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个用户,但仍然有8行返回到网页phpMyAdmin,每次返回正确的数字。
很明显,问题不在于代码。所以这超出了我的专长。可能导致此问题的原因是什么?如何解决?
答案 0 :(得分:0)
您的MySQL缓存设置是什么?当数据库中的数量少于数据库时,会返回8行,这听起来可能会将查询的旧结果缓存到我这里。您可以在SQL_NO_CACHE
语句后添加SELECT
来停用缓存,将查询更改为$query_str = 'SELECT SQL_NO_CACHE id, username, level_access, active FROM users';
有帮助吗?
答案 1 :(得分:0)
您是否已明确查询数据库(您认为)?
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_select_db ('myDatabase' , $link);
然后,您需要在查询中使用$link
句柄。
$result = mysql_query($query_str, $link);