【问题标题】:pdo exception: to many connectionspdo 异常:到许多连接
【发布时间】:2012-06-28 19:07:48
【问题描述】:

我有一个名为 Server.php 的类。在那个类中,我有一个连接到我的数据库的函数。我已经尝试扩展 max_connections,但并没有解决问题。也可以说,如果我删除一个连接到我的数据库的函数,问题就会消失。谁能告诉我可能是什么问题?

【问题讨论】:

  • 听起来问题是你有太多打开的数据库连接。
  • 您是否关闭过连接?如果你一遍又一遍地调用连接数据库的函数,但从不关闭连接,那么你最终会得到一个异常。
  • 如何在不将变量设置为 null 的情况下关闭连接?

标签: php mysql pdo


【解决方案1】:

每个 PDO 实例都是一个单独的连接,因此如果一个函数与数据库建立连接,则每次调用它都会创建一个连接。可能的解决方案按优先顺序排列:

  1. Dependancy Injection:将 PDO 实例作为参数,或者在对象的情况下,作为对象属性。
  2. 将 PDO 实例设为 Singleton
  3. 将 PDO 实例设为函数内的 static(如果这是您使用它的唯一点)。
  4. 使用连接创建一个global 变量。

【讨论】:

  • 但是您可以将 pdo 连接存储在静态或全局变量中吗?
  • 是的,你可以,这就是我提到它们的原因。
  • 但是当我将它更改为静态变量时,我收到错误:'致命错误:允许的内存大小为 134217728 字节已用尽'
  • 没有代码我无法调试它。把一个小案例发到 pastebin 或 codepad 等,我看看有没有时间看看。
  • 这看起来没那么糟糕,我假设您调用Server::connect() 一次,并且只调用一次,而不是更多(或者您可以用if(!self::$pdo instanceof PDO){/*only then create */} 包围它?其余的花絮似乎完全可行,我几乎认为内存不足是您在某处引入的循环,或者只是在另一个逻辑错误中收集了大量数据。
【解决方案2】:

例子:

连接mysql:

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
    if ($link) { // here all your operations
    }

关闭连接:

mysql_close($link);

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多