$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注入......
答案 0 :(得分:1)
简短回答:不重要。
答案很长:我认为以下命令可以释放内存:
$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()
可能是更好的风格,但这取决于您。
结论:不重要。