0

我有一个正常的网站。它使用 PHP 调用 MySQL 表。为了节省一直打字的时间,我在每个页面上都有include()一个connect.php文件连接到数据库。该网站不断收到“mysql太多连接”错误。在这样的页面开头连接是一个坏主意吗?

我是否应该在每次 PHP 脚本需要它时创建一个新连接,然后在该脚本完成后使用 mysql_close 关闭该连接?我避免这样做,因为它会向网站添加重复的代码行,但我想知道这是否是导致问题的原因?

所以目前我的代码类似于:

<?php
include("connect.php"); //connects to database using mysql_connect() function
...
PHP script that calls mysql
...
another PHP script that calls mysql
?>

我应该把它改成这样吗?

<?php
mysql_connect('host', 'username', 'password');
mysql_select_db('db');
PHP code that calls mysql
mysql_close();
...
mysql_connect('host', 'username', 'password');
mysql_select_db('db');
more PHP code that calls mysql
mysql_close();
?>
4

3 回答 3

2

您应该尽可能避免与数据库建立新连接。

连接到数据库是一个缓慢而昂贵的过程。打开连接会消耗很少的资源。

顺便说一句,停止使用 mysql_* 函数。使用 mysqli_* 或PDO

于 2013-08-28T15:27:58.023 回答
1

每次 PHP 脚本需要它时我应该创建一个新连接 [...] 吗?

是的,这是最有意义的,特别是如果不是每个页面都需要一个 mysql 连接。

在 PHP 中,这通过在文件中设置数据库凭据来工作php.ini,您只需调用mysql_select_db它,如果到目前为止不存在连接,它将自动连接到配置的数据库。

如果您编写新代码,请将数据库连接封装在它自己的对象中,以便您可以更细粒度地控制何时连接到数据库。

现代框架(例如Silex )允许您延迟加载此类中央组件(服务),因此您已配置它们并可以在需要时使用它们,但您无需担心资源(如连接限制你的例子)。

[...] 在脚本完成后关闭与 mysql_close 的连接?

您通常不需要它,因为 PHP 会为您执行此操作。

于 2013-08-28T15:28:25.213 回答
0

我不认为这种编码风格真的有什么问题。这完全取决于您正在编写什么样的应用程序。只要确保你检查好你的脚本并解决任何错误,你应该没问题。这是我通常做的

<?php session_start(); include "inc/config.php";
//require_once('chartz/lib/idiorm.php');
if ($_SESSION["login1"]== "Superadmin" or $_SESSION["login1"]== "User" or $_SESSION["login1"]=="Administrator")
{
    $snames = $_SESSION["name1"];
    $id = $_SESSION["id1"];
    $stype = $_SESSION["login1"];
    $stokperm = $_SESSION['stokperm'];
    $navtype = $_GET['nav'];
    include("inc/ps_pagination.php"); 
    }
  else
  {
    header ("location: ../../../index.php");
  }
?>

我并不是说它是最好的出路,我们都还在学习...

我还认为你应该非常认真地对待 blue112 的建议。我的大多数应用程序都以老式方式编写,但使用 mysqli_* 或 PDO 是要走的路。

于 2013-08-29T09:56:27.750 回答