1
$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 注入... ?

4

1 回答 1

2

简短的回答:不重要

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

$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()在你的代码中包含可以说是更好的风格,但这取决于你。

结论:不重要

于 2013-09-11T17:45:03.857 回答