2012-07-25 26 views
1

我熟悉PHP和MYSQLi连接,并阅读了PHP文档,包括http://www.php.net/manual/en/mysqli.persistconns.php,但我想知道在MYSQLi中建立和关闭连接的正确方法(性能方面) 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

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

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

使用某些凭证(用户名/密码)访问数据库并不意味着它可以与使用相同凭证的其他人“碰撞”。 即使数据库全部使用相同的凭据,但同时运行多个连接也是完美的。

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

准备的语句:

预处理语句是不错的。它们为数据库提供了使用存储在数据库上的执行计划的机会。当你使用复杂的查询时,这可以提供一些速度优势。他们也保护你免受SQL注入。

因此,继续使用准备好的语句。

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

所以,你最喜欢的方式(=最清晰/简洁)。

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