1

我熟悉 PHP 和 MYSQLi 连接,并阅读了 PHP 文档,包括http://www.php.net/manual/en/mysqli.persistconns.php,但我想知道建立和关闭的正确方法(性能方面) MYSQLi 中使用 PHP 的连接。

启动和关闭 mysqli 连接的最有效方法是什么?

如果 mysqli 连接在查询期间丢失,正确的处理方法是什么?

这是我当前的设置:

  1. Opening a connection at the beginning of the php page
  2. Making all the necessary queries through other classes
  3. Closing the connection at the end of page

/*
public exampleQuery ($conn, $p1, $p2) {
  $stmt = $conn->prepare("SELECT id FROM tbl_name WHERE c1=? AND c2=?");
  $stmt->bind_param("ss", $p1, $p2);
  $stmt->execute();
  // etc..
}
*/


$mysqli_connection = $connectionClass->connectToMYSQLi();
//Execute queries using prepared statements
$queryClass->exampleQuery($mysqli_connection,$param1, $param2);
$queryClass->exampleQueryTwo($mysqli_connection,$param1, $param2);
//etc...
$connectionClass_>closeMYSQLiConnection($mysqli_connection);
4

1 回答 1

1

一旦新用户同时重新加载或访问页面,PHP 如何处理连接?

PHP 还将确保您在脚本中使用的某些变量不会被碰巧访问同一页面的其他用户使用。数据库连接也是如此。

使用某些凭据(用户名/密码)访问数据库并不意味着它可以与使用相同凭据的其他人“冲突”。数据库可以同时运行多个连接,即使它们都使用相同的凭据。

但这不应该是您的问题/担心(作为功能的最终用户,作为开发人员),但它归结为 PHP 分叉进程或使用线程安全模块来服务每个请求。然后,与每个请求相关联的每个进程都会向数据库启动一个新会话(或回收一个会话)。

准备好的陈述:

准备好的陈述是好的。它们为数据库提供了使用存储在数据库中的执行计划的机会。当您使用复杂的查询时,这可以带来一些速度优势。它们还可以保护您免受 SQL 注入。

所以继续使用准备好的语句。

如何在代码中构建它们取决于您。如果您从某个类调用语句,数据库根本不在乎。如果您在 Java 应用程序中使用相同的预编译语句,它们仍然是预编译语句(如果数据库支持它们)。数据库仍然会为他们准备好执行计划。

所以按照你最喜欢的方式去做(=对你来说最清晰/简洁)。

关于这个主题还有很多话要说,我解释的一些概念只是部分正确,但我希望这能刷大图。

于 2012-07-25T15:44:33.310 回答