2011-07-15 3 views
2

mysqlクラスの一部の関数にアクセスしようとしたときに問題が発生しています。次のように私は私のデータベースに接続する必要があり機能は次のとおりです。mysql_connectでリソースタイプが「不明」

function connect_DB() { 
    $this->connection = mysql_connect($this->dbURL, $this->dbUser, $this->dbPass) or trigger_error('Connection failed: ' . mysql_error($connection), E_USER_ERROR); 
    $this->db = mysql_select_db($this->dbName, $this->connection) or trigger_error('Database selection failed: ' . mysql_error($db), E_USER_ERROR); 
} 

そして私は、この使用して私のmysqlのオブジェクトを作成します。

$dbConf = new StoreConfDB(); 
$dbConf->connect_DB(); 

を今私は、列のすべてをつかむことになっている機能を持っています指定されたテーブルの名前。コード:

function get_db_columns($table) { 
global $dbConf; 
print_r($dbConf->get_db()); 
$result = $dbConf->query_DB_resource('SELECT * FROM ' . $table); 
for($i = 0; $i < mysql_num_fields($result); $i++) { 
    $meta = mysql_fetch_field($result, $i); 
    $fields[] = $meta->name; 
} 
mysql_free_result($result); 
return $fields; 
} 

しかし、私のようなエラーが、取得しています:

Warning: mysql_query(): 5 is not a valid MySQL-Link resource 

を私はするmysql_query呼び出しから接続引数を削除しようとする場合、私はこれを取得:

Notice: Could not run query: No database selected in ... 

私はデバッガを実行しており、問題の内容を正確に把握しています(私は思っています)。クラスが動作すると、接続変数を次のように設定されていますresource id='5' type='mysql link'

しかし、それはget_db_columns()関数の内部からのmysqlクラスのクエリ関数を呼び出すと、接続変数は次のとおりですので、何とか接続変数はめちゃめちゃますresource id='5' type='Unknown'

両方の接続変数が同じものでなければならないのでしょうか? ($dbConfから)?私は2つの異なる場所でこの機能をテストしました。助けてください!

@footy:$ dbConf上

ますprint_rを返します。

StoreConfDB Object ([dbURL] => localhost [dbUser] => root [dbPass] => [dbName] => db1 [connection] => Resource id #5 [db] => 1) 

query_DB_resource機能を:

function query_DB_resource($query) { 
    $sql_query = mysql_query($query) or trigger_error('Could not run query: '. mysql_error()); 
    return $sql_query; 
} 
+0

$ dbConf変数が* get_db_columns($ table)*関数を呼び出す前に*初期化されているかどうか確かめてください。より安全なメソッドを作成するには、データベース接続をコンストラクタに入れて、毎回DB接続に接続していることを確認してください。 – footy

+0

* query_DB_resource *関数も投稿できます。それには誤りがあるかもしれません。もっと良いことに、全体のページをここに投稿すると、人々が包括的な見た目を簡単に得ることができます。 – footy

答えて

0

私は問題のカップルに気づいた:

あなたはmysql_error($connection)を持っていますおよびmysql_error($db)。これらは有効なパラメータではありません。どちらの場合も$this->connectionを使用する必要があります。それはより良いエラー出力を与えるでしょう。

通常、接続リソースをmysql_queryに渡すと大したことはありませんが、この場合はmysql_query($query, $this->connection)です。それが保証された修正だとは言えませんが、それは助けになる可能性があります。

誰かが使うたびにglobal神が子猫を殺します。それは本当です。彼は私に言った。それか私には悪いナチョスがあった。 (はい、私はこの問題に関する狂信者だ。それは良いことだ。は私にを信頼)

にかかわらず、あなたは、関数の内部で変数が必要な場合で、それを渡すかのプロパティを作るのいずれか新しいクラス(StoreConfDBをシングルトンにする - ファクトリメソッドでアクセスできるようにする - 選択肢が多い) - 習慣としてグローバル化を回避すると、unexpected side effectsという厄介なものが削除されます。

関連する問題