最好的做法是做很多连接mysqli

时间:2016-03-15 11:15:53

标签: php mysqli

我这天收到max_user_connections错误。我想知道我是否做错了什么。

我有一个带有mysqli连接脚本的config.php文件:

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

所以我需要在mysqli中获取内容的页面包括config.php。这是一个例子:

使用example.php

<?php
     include_once("config.php");

     $stmt = $mysqli->prepare("select...");
     $stmt->execute();
     $stmt->bind_result(...,...);
     while($stmt->fetch()) {
         ...
     }
     $stmt->close();
?>

some html <p> <img>...

<?php
     $stmt = $mysqli->prepare("select...");
     $stmt->execute();
     $stmt->bind_result(...,...);
     while($stmt->fetch()) {
       ...
     }
     $stmt->close();
?>

some html <p> <img>...

<?php
      $stmt = $mysqli->prepare("select...");
      $stmt->execute();
      $stmt->bind_result(...,...);
      while($stmt->fetch()) {
        ...
      }
      $stmt->close();
?>

所以,我的问题是:选择这样的选择是最佳做法吗?我应该在每次选择后再关闭mysqli connect并重新打开吗?或者在没有separete的情况下选择顶部而不是中间的某些html?

1 个答案:

答案 0 :(得分:1)

  

做这样选择的最佳做法是什么?

当人们使用术语&#34;最佳实践&#34;它通常是一个很好的指标,他们不知道他们在说什么。

您的方法的优点是它简洁明了。但正如你所发现的,它不能很好地扩展。

在实践中,它很难衡量,但在大多数应用程序中,MySQL连接在脚本的大部分生命周期中都未使用。因此,通过推迟连接的开放并尽快关闭它,通常会有很大的胜利。

前者可以通过修改mysqli类来完成,connect方法只存储凭据,而需要与数据库通信的任何东西都应该在需要访问数据库时调用包装的connect方法。但是,除非您的代码创建了许多从未使用过的数据库连接,否则这种方法通常会很低(在这种情况下,更便宜的解决方案是增加连接限制)。

在关闭连接之前运行最后一个查询可能需要很长时间。显式关闭连接会解决这个问题,但需要进行大量的代码更改。

不要为每个查询打开和关闭连接。虽然它会减少与数据库的连接数量,但性能会很差

最大胜利通常来自优化您的查询 - 降低并发性和更好的用户体验。