1 回答

TA贡献1877条经验 获得超1个赞
您存储对象的时间不应mysqli_result超过获取数据所需的时间。它仅用作从 MySQL 获取数据的临时对象。而是缓存值。
if (isset($dbcache[$query])) {
$this->result = $dbcache[$query];
} else {
$dbcache[$query] = $this->result = $dbh->query($query)->fetch_all(MYSQLI_ASSOC);
}
但是,我对这种方法对于准备好的语句的有用性持谨慎态度。您可能希望将键设为查询和参数的组合。例如:
$key = serialize([$query, ...$params]);
if (isset($dbcache[$key])) {
$this->result = $dbcache[$key];
} else {
//prepare bind execute
$stmt = $dbh->prepare($query);
if ($params) {
$stmt->bind_param(str_repeat("s", count($params)), ...$params);
}
$stmt->execute();
// Fetch results into multidimensional array
$dbcache[$key] = $this->result = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
}
您确实应该避免在应用程序代码中使用 mysqli 函数。如果您正在构建某种抽象层,那么您应该只将数据返回到应用程序并仅在内部使用 mysqli。使用我推荐的方法,您将像普通数组一样访问数据;没有更多的fetch_object()方法了。当然,这需要您更改应用程序代码,但这样做是个好主意。我还强烈建议开始使用 PDO。
- 1 回答
- 0 关注
- 89 浏览
添加回答
举报