2009-07-21 2 views
0

を選択していない私は、次のDBインタフェースクラスを書かれている:PHPカスタムDBインタフェースクラス - 何のデータベースは

<?php 

// dbinterface.php 

class db { 
    private $con; 
    private $host; 
    private $user; 
    private $pass; 
    private $database; 
    private $error; 

    function db($host, $user, $pass, $database) { 
     $this->con = mysql_connect($host, $user, $pass); 
     mysql_select_db($database); 
    } 

    function escape($text) { 
     return mysql_real_escape_string($text); 
    } 

    function run($query) { 
     $q = mysql_query($query); 
     if ($q === false) { 
      $this->error = "Error " . mysql_errno() . ": " . mysql_error($this->con); 
      return false; 
     } elseif ($q === true) { 
      return true; 
     } else { 
      $result = array(); 
      while ($row = mysql_fetch_assoc($q)) { 
       array_push($result, $row); 
      } 
      return $result; 
     } 
    } 

    function get_error() { 
     return $this->error; 
    } 

    function cose() { 
     mysql_close($this->con); 
    } 
} 


?> 

問題は、私はそれでクエリを実行しようとすると、何らかの理由で、私はエラーを取得するということです: データベースが選択されていません。しかし、私のコードは、コンストラクタでそれを選択します。チェックして、正しいdb名を渡していることを確認しました。私はそれが実際に渡されていることを確認しました。

答えて

1

組み込み関数の戻り値は常にチェックする必要があります。このようなものを試してみると、回答が得られるかもしれません。

function db($host, $user, $pass, $database) { 
    if (($this->con = mysql_connect($host, $user, $pass)) === false) { 
     throw new Exception(mysql_error()); 
    } 
    if (!mysql_select_db($database)) { 
     throw new Exception(mysql_error()); 
    } 
} 
0

このクラスは私のためにうまくいきます...あなたは間違いなくより多くのエラーチェックを行う必要があります。存在しないデータベースを指定した場合は、次に選択した場所に「No database selected」というエラーが表示されます。

EDIT:mysql_select_db()の戻り値をテストしてエラーをトリガするか、trueを返さない場合は例外をスローします。

+0

はい私はこれを試してみましたが、エラーは発生しません。 –