gpt4 book ai didi

php - $stmt->free_result() 有多重要

转载 作者:行者123 更新时间:2023-11-29 00:26:19 24 4
gpt4 key购买 nike

$stmt = $mysqli->prepare("SELECT id, expire, status, username FROM username WHERE username= ?");
$stmt->bind_param('s', $username);
$stmt->execute();
// Store the result (so you can get the properties, like num_rows)
$stmt->store_result();
// Get the number of rows
$amountOfRows = $stmt->num_rows;

// Bind the result to variables
$stmt->bind_result($id, $expire, $status, $db_username);
// Process the variables
while($stmt->fetch()) {
printf("%d %s %s %s\n", $id, $expire, $status, $db_username);
}

是否需要添加

$stmt->free_result();

关于

$stmt->close();

$mysqli->close();

问题 1:我猜答案是肯定的,但我想知道这三个中的每一个的作用,以便更好地了解如何使用它们。

我找不到很多文档来描述它们的作用以及它们为何重要。

问题 2:我的代码在表面上运行得非常好,那么使用这些代码有什么好处?数据管理、性能、安全性、SQL 注入(inject)……?

最佳答案

简短回答:不重要

长答案:我认为以下命令可以释放内存:

$stmt->free_result();
$stmt->close();
$mysqli->close();

我不确定,所以我测试了它。

echo(memory_get_usage());  // returns 226472

$mysqli = new mysqli(/* credentials */);
$stmt = $mysqli->prepare("SELECT id, username FROM members");
$stmt->execute();
$stmt->store_result();
$amountOfRows = $stmt->num_rows;
$stmt->bind_result($id, $username);

while($stmt->fetch()) {
printf("%d %s\n", $id, $username);
}

echo(memory_get_usage()); // now returns 230176 (gained 3704)

$stmt->free_result();
echo(memory_get_usage()); // returns 230176 (lost 0)

$stmt->close();
echo(memory_get_usage()); // returns 229816 (lost 360)

$mysqli->close();
echo(memory_get_usage()); // returns 229720 (lost 96)

$stmt->close()$mysqli->close() 实际上释放了内存,但只是一点点。

你的系统不会因为你选择不写这两/三行而变得更容易受到攻击。他们只释放(小)内存。在您的代码中至少包含 $mysqli->close() 可以说是更好的风格,但这取决于您。

结论:不重要

关于php - $stmt->free_result() 有多重要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18747128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com