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

将 global $db 放在函数的开头,如下所示:

 function userExists($user) {
      global $db;

     // Rest of code here

默认情况下,函数中的变量仅在 PHP 中本地存在。要使用在未作为参数传递的函数之外声明的变量(例如 $user),您需要使用如上所示的全局变量。

于 2013-02-22T15:13:11.747 回答
1

您可能只需修改您的函数以将 $db var 作为参数。例如:

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

默认情况下,对象是通过引用传递的(请参见此处),因此您不会在每次调用时无意中复制 $db 对象。

于 2013-02-22T15:17:33.707 回答
0

我也使用类进行连接和查询。但这将有助于您在类中定义连接所需的变量,因此您不必在每一页代码中重复它们。也许这个?使用 db 作为参数。

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

于 2013-02-22T15:29:50.887 回答