mysql_num_rows()返回0

时间:2014-04-14 22:21:57

标签: php mysql

我的$ 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);

1 个答案:

答案 0 :(得分:1)

您的代码没有明显错误。

最明显的解释是提交给数据库的查询没有返回任何行。

我建议您在将SQL文本提交到数据库之前添加一些基本调试:echo(或vardump或printf)SQL文本 $sql 的值。

验证SQL文本是否是您希望提交给数据库的,并且此查询返回一行。

作为调试的另一个步骤,我建议您实际从结果集中获取行,并显示返回的行。


我通常在SELECT列表中为文字指定一个别名,例如

SELECT 1 AS one FROM ...

但我不认为这会导致mysql_num_rows出现问题。


我相信早期版本的PHP默认启用了“魔术引号”功能(在字符串上自动运行addslashes函数);回显生成的SQL会显示“双重转义”是否存在问题。


<强>附录

这里必须注意 mysql _ 界面已弃用,新开发应该使用(大大改进的)替换之一: mysqli PDO