PHPクラスデータベース接続スコープの問題
-
02-07-2019 - |
質問
PHPで行っている新しいプロジェクトのために、データベースに接続してクエリを実行するSQLMethodsクラスを作成しました。今夜は実際にそれをテストした最初の夜で(1週間ほど前に書いて忘れていました)、予期しないエラーが発生しました:ExecuteQuery()関数を呼び出していたとき、データベースを使用しませんでしたコンストラクタで選択されます。
コンストラクター:
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());
}
誰が問題が何であるかを見ていますか?コンストラクターの完了後に接続は閉じますか?
解決
クラスで$ SQLConnectionを宣言する必要があり、それを
として参照する必要があります $this->SQLConnection
単なる$ SQLConnectionではありません。
他のヒント
$ SQLConnection
は、 ExecuteQuery
メソッド内に存在しません。
ExecuteQuery
にパラメーターとして直接渡すか、コンストラクターで設定され、 $ this-としてアクセスされる
クラスメソッド内。 sqlConnection
クラスプロパティを追加できます。 > sqlConnection
使用しようとしている変数 $ SQLConnection
ExecuteQuery()
は、別のスコープ内で作成されます。 ( SQLMethods
関数)。
PHPスクリプトが処理を完了したとき、または自分で閉じた場合(そのスクリプト内で接続が行われた場合)、接続は閉じます
php.netのドキュメントに記載されているように、 ExecuteQuery
内の $ SQLConnection
変数をスキップする必要があります
リンク識別子が指定されていない場合、
mysql_connect()
によって開かれた最後のリンクが想定されます。