我的$ result变量将等于"资源ID#4"程序执行时 这显然意味着我的mysql_query()已成功执行。 但是当我调用mysql_num_rows($ result)时,我总是回来0.虽然确实存在一行,但我仍然得到0的值。为什么?
if (isset($_POST["user"]) && isset($_POST["pass"]))
{
// prepare SQL
$sql = sprintf("SELECT 1 FROM users WHERE username='%s' AND password=PASSWORD('%s')",
mysql_real_escape_string($_POST["user"]),
mysql_real_escape_string($_POST["pass"]));
// execute query
$result = mysql_query($sql);
if ($result === false)
die("Could not query database");
$numOfRows = mysql_num_rows($result);
答案 0 :(得分:1)
您的代码没有明显错误。
最明显的解释是提交给数据库的查询没有返回任何行。
我建议您在将SQL文本提交到数据库之前添加一些基本调试:echo(或vardump或printf)SQL文本 $sql
的值。
验证SQL文本是否是您希望提交给数据库的,并且此查询返回一行。
作为调试的另一个步骤,我建议您实际从结果集中获取行,并显示返回的行。
我通常在SELECT列表中为文字指定一个别名,例如
SELECT 1 AS one FROM ...
但我不认为这会导致mysql_num_rows出现问题。
我相信早期版本的PHP默认启用了“魔术引号”功能(在字符串上自动运行addslashes函数);回显生成的SQL会显示“双重转义”是否存在问题。
<强>附录强>
这里必须注意 mysql _ 界面已弃用,新开发应该使用(大大改进的)替换之一: mysqli 或 PDO 强>