0

我有几个 PHP 文件,每个文件都需要一个 Mysql 连接。然后我有一个带有 mysql 基本数据库查询的通用文件 connect.php,我在 Header.php 中添加了这个文件。

但值得关注的是,每次 connect.php 都会建立与 DB 的连接(因为这包含在 Header 中)。这将是有害的 MySql 服务器,我的应用程序很大而且大约。里面有 200 个表,有 20 万个条目。我想通过 php.ini 建立数据库连接,这意味着一旦我配置了 php.ini 就无需在代码中的任何位置添加 mysql_connect() 查询。php.ini 中只有一个设置。请解释我不熟悉php.ini的步骤

4

1 回答 1

0

我的应用程序很大而且大约。里面有 200 个表,有 200,000 个条目

那不是很大。然而,大量的表通常是一个很好的指标,表明您试图对数据进行分片并破坏规范化。

意味着一旦我配置了 php.ini,则无需在代码中的任何位置添加 mysql_connect() 查询

添加mysql_connect()真的那么难吗?? 如果在您的 ini 文件或自动添加的包含文件中设置了用户名/密码,您甚至不需要显式设置它们。事实上,如果你将 db 函数包装在你的包含文件中,你可以懒惰地连接:

<?php
ini_set('mysql.default_user', 'scott');
ini_set('mysql.default_password','pussycat');

$GLOBALS['my_db_handle']=false;

function wrap_mysql_connect()
{
   if (false===$GLOBALS['my_db_handle']) {
       $GLOBALS['my_db_handle']=mysql_connect();
       @mysql_select_db('my_preferred_db', $GLOBALS['my_db_handle']);
       @mysql_set_charset('utf8', $GLOBALS['my_db_handle']);
   }
   return $GLOBALS['my_db_handle'];
}

function wrap_mysql_query($sql)
{
   if (false===$GLOBALS['my_db_handle']) {
      wrap_mysql_connect();
   }
   if (false===$GLOBALS['my_db_handle']) {
      trigger_error(mysql_error());
      return false;
   }
   $result=mysql_query($sql, $GLOBALS['my_db_handle']);
   if (false === $result) {
      trigger_error(mysql_error());
      return false;
   }
   return result;
}

虽然在不需要时打开数据库连接(并且在不再需要时未能显式关闭它们)确实会不必要地消耗资源,但开销并不大 - 请注意过早的优化。

于 2013-02-28T20:46:59.080 回答