我构建了一个利用PHP内置MySQLi类的能力的类,它旨在简化数据库交互。但是,使用OOP方法,我很难在运行查询后使用num_rows示例变量返回正确的行数。看看我的课堂快照。..
class Database {
//Connect to the database, all goes well ...
//Run a basic query on the database
public function query($query) {
//Run a query on the database an make sure is executed successfully
try {
//$this->connection->query uses MySQLi's built-in query method, not this one
if ($result = $this->connection->query($query, MYSQLI_USE_RESULT)) {
return $result;
} else {
$error = debug_backtrace();
throw new Exception(/* A long error message is thrown here */);
}
} catch (Exception $e) {
$this->connection->close();
die($e->getMessage());
}
}
//More methods, nothing of interest ...
}
下面是一个示例用法:
$db = new Database();
$result = $db->query("SELECT * FROM `pages`"); //Contains at least one entry
echo $result->num_rows; //Returns "0"
exit;
这怎么不准确呢?result object中的其他值是准确的,例如“field_count”。
3条答案
按热度按时间w3nuxt5m1#
这段代码取自PHP手册条目中的注解(现在因不相关而被删除):
这里的问题是MYSQLI_USE_RESULT。如果你删除它,num_rows属性会给予你一个正确的数字,因为PHP会预取整个结果集并将其存储在PHP进程的内存中--这样就可以计算其中的行数。
如果您需要使用MYSQLI_USE_RESULT(to save memory),则无法预先获取该数字。
hkmswyz62#
我遇到了同样的问题,发现解决方案是:
。。在执行$query之后和之前
echo $result-〉num_rows;
nwnhqdif3#
当使用MYSQLI_USE_RESULT禁用结果行缓冲时,这可能是正常行为
禁用缓冲区意味着由您来获取、存储和 COUNT 行。您应该使用默认标志
相当于