1

好的,所以现在我的网站上有 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>。这是安全/良好的做法吗?

4

2 回答 2

2

打开和关闭连接会占用资源,因此目标是尽可能少地打开/关闭连接,从而在打开单个连接时执行尽可能多的查询。

这是否意味着在脚本启动时打开连接并在完成时关闭它,或者为每个查询打开/关闭,将取​​决于您的应用程序的性质。

例如,如果您的大多数脚本都有一个或多个查询,那么打开/关闭连接以及脚本的开头和结尾将是最好的。另一方面,如果您的大多数脚本都是无查询的,那么在您想要执行查询时建立连接将是您最好的选择。

于 2013-07-28T17:39:02.473 回答
1

最好让连接保持打开状态,运行多个查询,然后在页面末尾关闭连接。

是的。

还是最好在每次查询之前打开连接,然后立即关闭?

不。

目前我在页面打开标记之前打开连接,然后在关闭之后关闭它。这是安全/良好的做法吗?


,您的应用程序必须以这样一种方式构建,以便在页面打开<head>标记之前轻松关闭连接,因为所有数据库交互都必须在任何输出开始之前完成。

在 PHP 中执行参数化查询的最佳实践?

当然要创建一个函数,在一行而不是十行中执行(并处理所有这些打开/关闭的东西),像这样

$data = $db->get("SELECT `a` FROM `b` WHERE `c` = ?", $test1);
于 2013-07-28T17:35:13.480 回答