在多个php文件中使用mysql数据库的正确方法

时间:2011-03-04 07:06:08

标签: php mysql

大家好,我只是想知道对mysql数据库中的表进行多次查询的最佳方法是什么。我应该为每个不同的.php页面创建一个新的mysqli对象($ mysqli = new mysqli(“localhost”,“root”,“root”,“db”);)?

或者有没有办法在我网站上的所有php文件中重复使用这一次?任何建议都会很酷

4 个答案:

答案 0 :(得分:2)

我的投票是采取OOP方法。我将有一个脚本,其中包含一个DB conn类,并且该类中的方法检查是否存在连接,以及它是否返回连接对象。您可以在需要访问数据库的页面上引用[ include_once(); ]的db类脚本。然后,它将实例化db对象,触发“if-exists”方法,如果它返回true,则只使用对象中的现有连接。

您还可以看一下利用与DB的persitent连接

Persistent connections

但老实说,从应用程序的长期运行和可伸缩性来看,您自己处理数据库连接管理而不是不断打开连接会更好。

以下是我将如何构建该类的示例:

作为注释,由@alex制作,mysql_error()不应在display_errors()设置为显示所有警告的环境中回显到页面。 (例如error_reporting(E_WARNING);)

class dbconn {
protected $database;

function __construct(){
    $this->connect();
}

protected function connect() {
    $this->database = mysql_connect('host', 'user', 'pass')  or die("<p>Error connecting to the database<br /><strong>" . mysql_error() ."</strong></p>" );
    mysql_select_db('databasename') or die("<p>Error selecting the database<br />" . mysql_error() . "</strong></p>");
}

function __destruct(){
    mysql_close($this->database);
}

function db(){
     if (!isset($this->database)) { 
        $this->connect(); 
     }
     return $this->database;
  }

  }

答案 1 :(得分:1)

您需要为每个页面创建连接,因为每个PHP脚本的生命周期都是请求的生命周期。

但是,您可以将连接代码放在一个文件中,然后将include放在所有页面中。

答案 2 :(得分:0)

您可以创建一个connect.php来验证您的应用程序是否包含它,然后创建数据库连接。

然后,您可以在应用程序的init开头包含该文件,或者需要连接的任何独立脚本的开头=)

答案 3 :(得分:-1)

取决于网站的结构。如果你有:

<a herf='login.php'>login</a>
<a herf='register.php'>register</a>
<a herf='about.php'>about</a>

...,然后你必须连接每个PHP文件,即login.phpregister.phpabout.php。为了方便起见,我要创建保存用户/通行证的config.php文件,或者甚至像Shad said一样。


您可能还包含index.php,其中包含以下内容:

if ( !isset($_GET['module']) ) {
    $_GET['module'] = 'about';
}
switch ( $_GET['module'] ) {
    default:
    case 'about':
        include 'about.php';
        break;
    case 'login':
        include 'login.php';
        break;
    case 'register':
        include 'register.php';
        break;
}

和HTML代码:

<a herf='?module=login'>login</a>
<a herf='?module=register'>register</a>
<a herf='?module=about'>about</a>

在这种情况下,您可以在index.php中连接,然后将连接传递给所有其他涉及的文件。


第二种方式对我来说似乎更为常见,即感觉更直观,更方便,这就是我一直以来所做的。

我相信在某些情况下,在需要时(对于事务甚至是单个查询)使用持久连接和保留/释放连接可能是值得的(性能方面)。例如,我现在正在使用的简单系统需要70ms-100ms才能生成,而SQL查询只需要40ms-50ms。如果使用“单一连接”方法,则意味着连接浪费了大约50%的时间,而“需要时保留/释放连接”与持久连接不会有这样的问题。

还有一件事 - 我建议你创建一些包装器,即在构造函数中连接到DB的一些DBConnection类,并且有select()之类的方法(返回数据数组),{{1 (返回单个值,例如,selectValue()将返回$db->selectValue('select count(*) from user')),某些(int)$numberOfUsers用于插入和更新等。