使用PHP(性能)连接到MYSQLi的正确方法

时间:2012-07-25 15:26:31

标签: php performance mysqli prepared-statement

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

启动和关闭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);

1 个答案:

答案 0 :(得分:1)

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

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

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

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

准备好的陈述:

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

所以继续使用准备好的陈述。

如何在代码中构建它们取决于您自己。如果您调用某个类的语句,数据库根本不关心。 如果您使用来自Java应用程序的相同预准备语句,它们仍然是准备好的语句(如果数据库支持它们,那就是。)。数据库仍然可以为他们准备好执行计划。

这样做你最喜欢的方式(=最清楚/最简洁)。

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