好的,我现在可以轻松地在我的网站上查询100-200个查询,所有参数化都已完成。
以下是其中一个例子:
$mysqli = new mysqli('localhost', 'user', 'password', 'db_name');
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
$stmt = $mysqli->prepare("SELECT `x` FROM `y` WHERE `z` = ?");
$stmt->bind_param("s", $test);
$stmt->execute();
$stmt->store_result();
$stmt->close();
$mysqli->close();
所以我的问题是,打开/关闭数据库连接的最佳做法是什么?
最好是保持连接打开,运行多个查询,然后关闭页面末尾的连接。像这样:
$mysqli = new mysqli('localhost', 'user', 'password', 'db_name');
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
$stmt = $mysqli->prepare("SELECT `a` FROM `b` WHERE `c` = ?");
$stmt->bind_param("s", $test1);
$stmt->execute();
$stmt->store_result();
$stmt->close();
$stmt = $mysqli->prepare("SELECT `x` FROM `y` WHERE `z` = ?");
$stmt->bind_param("s", $test2);
$stmt->execute();
$stmt->store_result();
$stmt->close();
$mysqli->close();
或者最好在每次查询之前打开连接,然后立即关闭?像这样:
$mysqli = new mysqli('localhost', 'user', 'password', 'db_name');
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
$stmt = $mysqli->prepare("SELECT `a` FROM `b` WHERE `c` = ?");
$stmt->bind_param("s", $test1);
$stmt->execute();
$stmt->store_result();
$stmt->close();
$mysqli->close();
$mysqli = new mysqli('localhost', 'user', 'password', 'db_name');
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
$stmt = $mysqli->prepare("SELECT `x` FROM `y` WHERE `z` = ?");
$stmt->bind_param("s", $test2);
$stmt->execute();
$stmt->store_result();
$stmt->close();
$mysqli->close();
目前我在页面打开<html>
标记之前打开连接,然后在结束</html>
标记之后关闭它。这是安全/良好的做法吗?
答案 0 :(得分:2)
打开和关闭连接需要资源,因此目标是尽可能少地打开/关闭连接,从而在单个连接打开时执行尽可能多的查询。
这是否意味着在脚本启动时打开连接,在完成时打开连接,或者为每个查询打开/关闭,这取决于应用程序的性质。
例如,如果您的大多数脚本都有一个或多个查询,那么打开/关闭连接以及脚本的开头和结尾将是最好的。另一方面,如果您的大多数脚本都是无查询的,那么在您想要执行查询时建立连接将是您最好的选择。
答案 1 :(得分:1)
最好是保持连接打开,运行多个查询,然后关闭页面末尾的连接。
是
或者最好在每次查询之前打开连接,然后立即关闭?
没有
目前我在页面打开标记之前打开连接,然后在关闭之后关闭它。这是安全/良好的做法吗?
没有。
您的应用程序必须以这样的方式构建,以便在页面打开<head>
标记之前轻松关闭连接,因为所有数据库交互必须在任何输出开始之前完成。
在PHP中执行参数化查询的最佳实践?
要创建一个函数,当然要在一行而不是十行执行(以及处理所有这些打开/关闭的东西),像这样
$data = $db->get("SELECT `a` FROM `b` WHERE `c` = ?", $test1);