2012-06-06 7 views
16

私はまだ購入した本からほとんどを学んでいますが、今年はPHPでのプログラミングに関して購入したにもかかわらず、私の本は古くなっています。今私は、PHPのmysql_ *コマンドは廃止予定であり、より安全で安定したプリペアドステートメントとPDOに置き換えられるべきであることを知っています。だから私はそれに応じてすべての私のウェブを書き直して、おそらく私はあなたからのアドバイスが必要です。 (データベースに接続してDBを選択する)ここで(私はGoogleとマニュアルで自分で行うことができる残りの部分)。ここで私の古いスクリプトを書いて、私が何かを正しく行えば何かを逃していないかどうか聞いてみると、これは他の人のための良いマニュアル/答えかもしれないと思います。だから始めることができます。古いmysql-phpコードを廃止予定のmysql_ *関数で書き直すには?

$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'); 

だからconfigに、私はこのようなものがありますか?しかし、後でデータベースを選択する必要があるときは、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 __constructpublic function __destruct()のような機能はもはや必要ではないでしょうか? public function connect()のような関数と同じことは残っているのはpublic function selectDb($database)なので、データベースへの接続を完全に妨害することなくこれを正しく行う方法はわかりません。私のコード(ここでは言及しません)の残りの部分では、私はこのコードでデータベースを簡単に選ぶことができます:$this->db->selectDb("people");しかし、準備されたステートメントでは、これが簡単な方法でも可能かどうかわかりません。私は、この周りのアドバイスが私と他のユーザーにこの新しいコードをよく理解させる助けになることを願っています。あなたが持っているかもしれないコードの他の部分は、このPDO Tutorial for MySQL Developersに含まれています。ありがとうございました。

+8

**疲れた古い「mysql_ *」恐竜からあなた自身をアップグレードするための勇気を持っているための超二重特別特別アップアップ! – rdlowrey

答えて

5

実際、シンプルで甘い、そして短い:はい、もう必要ありません。コンストラクタは単に、すべての設定が含まれて -

  • __construct

    は、我々は何かを失っているということではないコードを確認してみましょう。 PDOは、ここではほとんどの情報を含む接続文字列をはるかに簡単な概念を持っています

    mysql:host=127.0.0.1;dbname=people;charset=UTF-8 
    

    また、PDOは、既製の使用のためのコンストラクタを提供し、その必要はありません倍増します。

  • connect - 接続機能はもはや必要ではありません。これはすでにPDOをインスタンス化することによって行われます。あなたは例外を探すことができ、PHPマニュアルにはon it's constructor pageの例があります。

  • selectDb - この複雑な機能はもはや必要ではありません。うわー、私たちはPDO接続文字列のためにドロップできる3番目の関数です。非常に少ない文字で多くのパワー。乾杯!

  • __destruct - デストラクタ。公正なものにしよう:MySQLはこれを必要としませんでした。しかし、PDOでは、1行のコードを書くことなく、無料で入手できます。

いいね!古いコードを削除することで、あいまいなデータベースクラスからPDOに移行することができました。おめでとうございます。

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

私は自分でデータベースクラスを作成したいのですがあなたはPDOから延びることができるので、さてあなたは、それを行うことができます(はい、それは働く!):

class DB extends PDO 
{ 
    ... my super-new-shiny-code 
} 

なぜあなたはそれをしたいのでしょうか?いい考えはしませんが、あなたのコードにもっと堪能です。より良いコード例をお探しの場合は、PHP/MySQL Table with Hyperlinksにあります。

+0

こういうことができますか? http://paste2.org/p/2047291 – Byakugan

+0

いいえ、それは無効なPHPコードです。しかし、多分あなたはあなたが何をしたいのかを記述したいと思うかもしれません。私はあなたにその1つまたは他のヒントを与えることができます。 – hakre

+0

セキュリティ上の理由からデータベース内のパスを変更することがあるため、このコードは接続が有効かどうかをチェックし、偽の場合はメッセージを返します:)またはすべてが実際にPDOコード自体を行うのでしょうか? – Byakugan

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()でデータにアクセスできます。

関連する問題