1

私のデータベース クラスは完璧に動作し、このように呼び出します$db = new Database('user', 'pass', 'db', 'host');。スクリプトの先頭でこのデータベースを定義していますが、スクリプトの後半で関数内で接続を使用しようとしていますが、$dbグローバルではないため、関数はアクセスできません。$dbスクリプト内のすべての関数内に新しいデータベース クラス接続を作成する可能性がありますが、グローバル アクセス ポイントとしてにアクセスしたいと考えています。

ここにいくつかのコードがあります:

 require_once('database_class.php');

 $db = new Database('user', 'pass', 'db', 'host');



 // I can reach the $db here and make the $db->PDO->'statement'();



 function userExists($user) {

     $bool = false;

     // But in here I can't access $db...
     $query = $db->PDO->query('SELECT * FROM login WHERE username = "$user"');

     $result = $query->fetch();

     if ($result) {

         // User exists
         $bool = true;

     }

     return $bool;

 }
4

3 に答える 3

1

おそらく関数を変更して、 $db 変数を引数として取ることができます。例:

function userExists($user, $db) {
    ...
}

オブジェクトはデフォルトで参照によって渡されるため (こちらを参照)、呼び出しのたびに誤って $db オブジェクトのコピーを作成することはありません。

于 2013-02-22T15:17:33.707 に答える
1

グローバル $db を次のように関数の先頭に置きます。

 function userExists($user) {
      global $db;

     // Rest of code here

PHP では、関数内の変数はデフォルトでローカルにのみ存在します。引数として渡されない関数の外で宣言された変数 (例: $user) を使用するには、上記のようにグローバル変数を使用する必要があります。

于 2013-02-22T15:13:11.747 に答える
0

接続とクエリにもクラスを使用します。ただし、接続に必要な変数をクラスで定義しておくと、コードのすべてのページで変数を繰り返す必要がなくなります。そして多分これ?db を引数として使用します。

function userExists($user, $db) { //codecodecode }

于 2013-02-22T15:29:50.887 に答える