2008-09-26 22 views
1

私がPHPでやっている新しいプロジェクトでは、データベースに接続してクエリを実行するSQLMethodsクラスを作成しました。今夜は私が実際にテストした最初の夜でした(私は1週間ほど前にそれを書いて忘れていました)、予期せぬエラーが発生しました:私のExecuteQuery()関数を呼び出すとき、データベースIコンストラクタで選択します。PHPクラスデータベース接続スコープの問題

コンストラクタ:問題の

public function SQLMethods() { 
     $SQLConnection = mysql_connect($SQLDBAddress, $SQLUserName, $SQLPassword); 

     if (!$SQLConnection) { 
      die('Could not connect: ' . mysql_error()); 
     } 

     mysql_select_db($SQLDB, $SQLConnection); 
    } 

機能:

public function ExecuteQuery($Query) { 
     mysql_query($Query, $SQLConnection) or die('Could not perform query: ' . mysql_error()); 
    } 

誰もが問題があるかもしれないものを見ていますか?コンストラクタの完了後に接続が閉じますか?

答えて

7

あなたのクラスでの$のSQLConnectionを宣言しなければならない、とあなたは

$this->SQLConnection 

はなく、単に$のSQLConnectionとしてそれを参照してください。

2

$SQLConnectionは、ExecuteQueryメソッド内に存在しません。

ExecuteQueryのパラメータとして直接渡すこともできますし、sqlConnectionクラスのプロパティをコンストラクタで設定し、クラスメソッド内で$this->sqlConnectionとしてアクセスすることもできます。

1

変数$SQLConnectionExecuteQuery()は、別のスコープ内で作成しようとしています。 (SQLMethods機能)。

(接続は、そのスクリプト内で行われている場合)の接続は、PHPスクリプトはその作業を行っている場合、またはあなたがそれを閉じる場合は、自分自身を閉じ

php.netで述べたようにあなたがExecuteQuery$SQLConnection変数をスキップする必要がありますドキュメント

リンク識別子が指定されていない場合、最後のリンクはmysql_connect()であるとみなされます。