所以我仍然在改进我的模板引擎,现在我正在查看所请求的页面是否确实存在。请看一下以下功能:
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
的网页,我不知道这与它有什么关系,但是因为它可能有所帮助,我只是陈述一下。
感谢。
答案 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();
}