1 回答
TA贡献1921条经验 获得超9个赞
mysqli_result()mysqli从 MySQL 获取结果后,既不需要连接到 MySQL,也不需要对象。
注意:以上内容仅适用于缓冲查询。如果您使用无缓冲的结果集,则mysqli_result需要打开 mysqli 连接来获取数据,否则您将收到一条错误消息:
PHP 警告:mysqli_result::fetch_all():读取行时出错...
但是,只有在使用无缓冲查询时关闭连接时,才会出现此错误消息。例如
$res = $mysqli->query('SELECT id FROM Users LIMIT 1', MYSQLI_USE_RESULT);
$mysqli->close();
$res->fetch_all();
尽管mysqli_result在创建它的实例时需要有效的连接,但它只需要该连接来获取数据。中的第二个参数用于mysqli_result::__construct()决定结果集是应该在 PHP 中缓冲还是存储在 MySQL 服务器上并逐行获取。当您创建 的实例时,mysqli_result需要将 的实例mysqli作为第一个参数传递。
// Execute query on MySQL server
$res = $mysqli->real_query('SELECT id FROM Users LIMIT 1');
// Create the result object.
// The second argument can be MYSQLI_STORE_RESULT for buffered result or MYSQLI_USE_RESULT for unbuffered.
$res = new mysqli_result($mysqli, MYSQLI_STORE_RESULT);
// If MYSQLI_STORE_RESULT was used then you can close mysqli here.
unset($mysqli); // or $mysqli->close(); or both
$data = $res->fetch_all();
// If MYSQLI_USE_RESULT was used then you can't close mysqli yet.
// unset($mysqli);
$data = $res->fetch_all();
SQL 查询的缓冲是一项相当复杂的任务,最好避免重复调用,而不是实现缓存。SELECT尝试重构您的代码,以便在脚本执行期间不会多次调用相同的查询。
还有一个预制的解决方案,尽管不是很受欢迎。Mysqlnd查询结果缓存插件
一如既往地记住:
过早的优化是万恶之源
- 1 回答
- 0 关注
- 87 浏览
添加回答
举报