函数pageExist();总是返回false

时间:2014-08-13 21:25:30

标签: php mysqli prepared-statement

所以我仍然在改进我的模板引擎,现在我正在查看所请求的页面是否确实存在。请看一下以下功能:

public function pageExist( $id )
{
    $query = $this->db->connection->prepare( 'SELECT id FROM ' . $this->functions->prefix( 'pages' ) . ' where id = ?' );
    $query->bind_param( 'i', $id );
    $query->execute();
    if ( $query->num_rows > 0 )
    {
        return true;
    } 
        else
    {
        return false;
    }
    $query->close();
}

但问题是,它总是返回假,所以我准备好的陈述或其他什么都有问题吗?

我调用了一个ID为1的网页,我不知道这与它有什么关系,但是因为它可能有所帮助,我只是陈述一下。

感谢。

2 个答案:

答案 0 :(得分:0)

永远不会有id为0的行。如果是整数,数据库表必须从1开始。这将返回false,因为没有找到任何行。

答案 1 :(得分:0)

在访问mysqli_stmt::$num_rows之前,您必须致电mysqli_stmt::store_result()。见mysqli_stmt::$num_rows on php.net

摘录:

  

返回结果集中的行数。 mysqli_stmt_num_rows()的使用取决于您是否使用mysqli_stmt_store_result()来缓冲语句句柄中的整个结果集。

     

如果使用mysqli_stmt_store_result(),则可以立即调用mysqli_stmt_num_rows()。

试试这个:

public function pageExist( $id )
{
    $query = $this->db->connection->prepare( 'SELECT id FROM ' . $this->functions->prefix( 'pages' ) . ' where id = ?' );
    $query->bind_param( 'i', $id );
    $query->execute();
    // Call store_result() before accessing num_rows.
    $query->store_result();
    if ( $query->num_rows > 0 )
    {
        return true;
    } 
    else
    {
        return false;
    }
    $query->close();
}