11

私は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ファイルごとに1つのデータベース接続を使用できますか? または、データベースを使用する関数ごとに行う必要がありますか。

4

5 に答える 5

13

毎回新しいデータベース接続を作成することを避けるために、Singleton 設計パターンを使用できます-

DB 接続を処理するには、データベース クラスが必要です。

データベース.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('...');
?>
于 2012-04-18T12:24:14.833 に答える
12

config.php を作成し、コードを追加します。

config.php:

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

$conn = mysqli_connect($hostname, $username, $password) OR die('Unable to connect to database! Please try again later.');
mysqli_select_db($conn, $dbname);

次に、mysql を使用する任意のファイルに、次を追加します。

script2.php

<?php
require_once 'config.php';

mysqli_query($sqlApiAccess) or die('Error, insert query failed');
?>
于 2012-04-18T11:51:07.327 に答える
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");?> 

このファイルでは、任意のクエリを実行できます。

于 2012-04-18T11:51:03.973 に答える
1

これを行う:

$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 に接続する場合は、 global が必要になることに注意してください$db_connection

そして、DB 接続を閉じたい場合:

mysql_close($db_connection);
于 2012-04-18T11:51:08.920 に答える
0

mysql_connect接続情報を構成に移動し、呼び出しをいくつかのファクトリに移動しないのはなぜですか?

例えば

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');
于 2012-04-18T11:52:36.447 に答える