这两种功能的区别和具体用例是什么?下面是我的发现:
mysqli_free_result -释放与结果关联的内存
mysqli_stmt_free_result -释放给定语句句柄的存储结果内存
举个例子就好了。
发布于 2020-03-15 19:48:24
这是两个不同的函数,但您不需要使用它们中的任何一个。
mysqli_free_result
mysqli_free_result()是$result->free()的过程等价物。它所做的就是取消变量的结果。对象仍然存在,但变得不可用。
$id = 1;
$stmt = $mysqli->prepare('SELECT * FROM student_detail WHERE ID=?');
$stmt->bind_param('s', $id);
$stmt->execute();
$result = $stmt->get_result();
$result->free();
var_dump($result->fetch_assoc()); // error它还有两个别名。这4件事是一样的:
$result->free();
$result->close();
$result->free_result();
mysqli_free_result($result);mysqli_stmt_free_result
做同样的事,但是用语句本身。它相当于$stmt->free_result()
$id = 1;
$stmt = $mysqli->prepare('SELECT * FROM student_detail WHERE ID=?');
$stmt->bind_param('s', $id);
$stmt->execute();
$result = $stmt->store_result();
$stmt->free_result();
var_dump($stmt->fetch()); // false你可以假设,如果你发现自己需要使用它们中的任何一个,那就意味着你可能做错了什么。
例如,一些人声称,当您将结果释放后,它会为您的服务器节省内存。实际上,您应该以这样的方式封装您的数据库查询,使mysqli_result只在您需要的时候使用它。看一看我不久前写的一种方法:
public function safeQuery(string $sql, array $params = []): ?array {
$stmt = $this->prepare($sql);
if ($params) {
$stmt->bind_param(str_repeat("s", count($params)), ...$params);
}
$stmt->execute();
if ($result = $stmt->get_result()) {
return $result->fetch_all(MYSQLI_BOTH);
}
return null;
}它执行准备好的语句,获取结果,获取记录,只要需要,mysqli_result就会存活。
发布于 2020-03-15 18:43:56
它们是等价的,这首先取决于您是如何创建结果的。
如果使用准备好的语句,然后使用$stmt->store_result(),则可以使用$stmt->free_result()释放结果。
如果您执行像$result = $conn->query(...)这样的普通查询,您将使用$result->free_result()释放它。
https://stackoverflow.com/questions/60696177
复制相似问题