16

私はまだ主に購入した本から学んでいますが、PHP でのプログラミングに関する本を今年購入したにもかかわらず、私の本が古いことに今日気付きました。PHP の mysql_* コマンドは非推奨であり、より安全で安定したプリペアド ステートメントと PDO に置き換える必要があることがわかりました。それで、私はそれに応じてすべてのウェブを書き直すことにしました。おそらく、それを適切に行う方法と経験豊富な皆さんからのアドバイスが必要になるでしょう:)

したがって、ここでは主要部分 (db に接続して DB を選択) のみで書き直しを開始します (残りは Google とマニュアルを使用して自分で行うことができます)。ここに私の古いスクリプトを書き、すべてを正しく行っており、何も欠けていないかどうかを尋ねます。これが他の人にとっても良いマニュアル/回答になることを願っています. それでは始めましょう。

したがって、構成には次のようなものがあります。

$db = new dbConn('127.0.0.1', 'root', 'pass', 'people', 'animals');

次のようになります。

$db = new PDO('mysql:host=127.0.0.1;dbname=people;charset=UTF-8', 'root', 'pass');

右?しかし、後でデータベースを選択する必要がある場合は、なしで行う必要がありますdbname=people;か? しかし、後でデータベースを選択する方法は?

これは、ほとんどの Web プロジェクトで基本的な、書き換える唯一のスクリプトです。新しい PDO システムが実際にどのように機能するかを理解するだけでなく、

class dbConn
{
  public function __construct($server, $user, $pass, $db_people, $db_animals)
  {    
    if (!empty($server) && !empty($user) && !empty($pass) && !empty($db_people) && !empty($db_animals))
    {
      $this->server = $server;
      $this->user =  $user;
      $this->pass = $pass;
      $this->db_people = $db_people;  
      $this->db_animals = $db_animals;  
      $this->connect(); 
    }  
    else
    {
      die("Set up connection to db");
    }
  }

  public function connect()
  {
    $this->conn = mysql_connect($this->server, $this->user, $this->pass) or die ('cannot connect to MySQL');
  }

  public function selectDb($database)
  {
    switch($database)
    {
      case 'people':
        mysql_select_db($this->db_people, $this->conn) or die ('cannot connect to database '.$this->db_people.'.');
        mysql_query("SET NAMES 'utf8'");
        break;

      case 'animals':
        mysql_select_db($this->db_animals, $this->conn) or die ('cannot connect to database '.$this->db_animals.'.');
        mysql_query("SET NAMES 'utf8'"); 
    }
  }

  public function __destruct() 
  {
    if (!empty($this->conn))
    {
      mysql_close($this->conn); 
    }
  }  
}

だから私がGoogleとWikiから知っていることから-機能は好きpublic function __constructで、public function __destruct()もう必要ないはずですよね? public function connect()SOのような関数でも同じですpublic function selectDb($database)が、データベースへのすべての接続を損なうことなくこれを正しく行う方法がわかりません。私のコードの残りの部分(ここでは言及されていません)では、このコードでデータベースを簡単に選択できるためです。$this->db->selectDb("people");しかし、準備されたステートメントでは、これが簡単な方法で可能かどうかさえわかりません。これに関するあなたからのアドバイスが、私や他のユーザーがこの新しいコードをよりよく理解するのに役立つことを願っています。コードのその他の部分については、このPDO チュートリアル for MySQL 開発者 で説明されています。ありがとうございました。

4

2 に答える 2

1

アプリケーション内でデータベースを切り替える最も簡単な方法は次のとおりだと思います。

$pdo_instance->query("USE people");

$pdo_instance->query("USE animals");

または、おそらくより良い(そしてよりクリーンな)方法は

$db_people = new PDO('mysql:host=127.0.0.1;dbname=people;charset=UTF-8', 'root', 'pass');

$db_animals = new PDO('mysql:host=127.0.0.1;dbname=animals;charset=UTF-8', 'root', 'pass');

$db_people->query()クラス内のデータベースをアクティブとしてマークすると、またはを使用してデータにアクセスできます$db_animals->query()

于 2012-06-06T18:47:51.230 に答える