在使用数据库的每个函数中是否需要php mysql连接?

时间:2012-04-18 11:47:25

标签: php mysql

我正在创建一个php restful API,目前我在每个函数中都有数据库连接信息。

//Connect To Database
    $hostname=host;
    $username=username;
    $password=password;
    $dbname=dbname;

    mysql_connect($hostname, $username, $password) OR DIE('Unable to connect to database! Please try again later.');
    mysql_select_db($dbname);
mysql_query($sqlApiAccess) or die('Error, insert query failed');

这样做的最佳方法是什么,每个php文件可以有一个数据库连接吗?或者我是否需要按照使用数据库的功能来执行此操作。

5 个答案:

答案 0 :(得分:12)

创建config.php并添加代码:

config.php:

$hostname=host;
$username=username;
$password=password;
$dbname=dbname;

mysql_connect($hostname, $username, $password) OR DIE('Unable to connect to database! Please try again later.');
mysql_select_db($dbname);

然后在您希望使用mysql的任何文件中,添加以下内容:

script2.php

<?php
require_once 'config.php';

mysql_query($sqlApiAccess) or die('Error, insert query failed');
?>

答案 1 :(得分:12)

为避免每次都创建新的数据库连接,我们可以使用 Singleton design pattern -

我们需要一个数据库类来处理数据库连接 -

<强> Database.class.php

<?php
        class Database
        {
            // Store the single instance of Database
            private static $m_pInstance;

            private $db_host='localhost';
            private $db_user = 'root';
            private $db_pass = '';
            private $db_name = 'databasename';

            // Private constructor to limit object instantiation to within the class
            private function __construct() 
            {
                mysql_connect($this->db_host,$this->db_user,$this->db_pass);
                mysql_select_db($this->db_name);
            }

            // Getter method for creating/returning the single instance of this class
            public static function getInstance()
            {
                if (!self::$m_pInstance)
                {
                    self::$m_pInstance = new Database();
                }
                return self::$m_pInstance;
            }

            public function query($query)
            {
               return mysql_query($query);
            }

         }
?>

&安培;我们可以从其他文件中调用它 -

<强> other.php

<?php
       include 'singleton.php';
       $pDatabase = Database::getInstance();

       $result = $pDatabase->query('...');
?>

答案 2 :(得分:3)

无需在每个功能中建立连接。您需要创建一个像conn.php这样的连接文件并进行连接查询。

<?php
mysql_connect("localhost", "admin", "1admin") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
?>

在您要连接数据库的任何其他文件中,只需写下此行

<?php include("conn.php");?> 

在此文件中,您可以运行任何查询。

答案 3 :(得分:2)

这样做:

$db_connection= mysql_connect($hostname, $username, $password) OR DIE('Unable to connect to database! Please try again later.');

每次你想查询:

mysql_query("my_query",$db_connection);

注意,如果您在功能中连接到数据库,则需要全局$db_connection

当您想要关闭数据库连接时:

mysql_close($db_connection);

答案 4 :(得分:0)

为什么不将连接信息移出到配置中,并将mysql_connect的调用移到某个工厂?

E.g。

class ConnectionFactory {
    public static MysqlConnection CreateConnection() {
        $connection = mysql_connect(Config::$host, Config::$port etc);
        mysql_select_db($connection, Config::$schema);
        return $connection;
    }
}

然后在你的代码中

$connection = ConnectionFactory::CreateConnection();
mysql_query($connection, $sqlApiAccess) or die('Error, insert query failed');