包含文件和数据库连接


Included files & database connections

我的php函数无法识别包含在同一个文件中的另一个php文件中定义的变量。 dbconnect.php 使数据库连接。 add_user.php具有使用该数据库连接$dbco的add_user函数。 我收到一条错误消息,指出未为此函数调用定义$dbco:mysql_select_db("luxcal", $dbco); 这一定是非常明显的事情,但我不知道发生了什么。

数据库连接.php


<?php
    $dbco = mysql_connect("localhost","myuser","mypassword");
    if (!$dbco)
    {
        die('Could not connect: ' . mysql_error());
    }
?>

add_user.php


<?php include("dbconnect.php"); ?>
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
function add_user($username, $email, $password_text, $copasswd_text) {
    $password = md5($password_text);
    $copasswd = md5($password_text);
    $privPost = 1; // 3: max.
    $privSedit = 0;
    mysql_select_db("luxcal", $dbco);
    $q_add_user = "INSERT INTO users (`user_name`, `email`, `password`) VALUES ( '".mysql_real_escape_string($username)."', '".mysql_real_escape_string($email)."', '$password' )";
    $r_add_user = mysql_query($q_add_user);
    return;
}
echo add_user(trim($_REQUEST['uname']), trim($_REQUEST['uemail']), trim($_REQUEST['upass']), trim($_REQUEST['cpass']));
?>

尝试改用单例数据库类。在您的情况下,您最终可能会得到许多不同的数据库连接,这很糟糕。

像这样的东西(取自:http://www.matthewelliston.com/php-singleton-database-class/

class Database {
    private static $instance;
    private $connection;
    private function __construct(){
        $this->connection = mysql_connect("localhost","root","pw"); // or whatever connection you use
    }
    public static function getInstance(){
        if(empty(self::$instance)){
            try{
                self::$instance = new Database();
            } catch (Exception $e) {
                echo 'Connection failed: ' . $e->getMessage();
            }
        }
        return self::$instance;
    }
    public function query($query, $args){ 
        ... //general query function
    }
}

然后,您可以通过调用来获取数据库实例

$db = Database::getInstance();
//and do
$db.query("INSERT INTO ...");

变量$dbco在函数add_user中不可用,因为它不在函数的变量范围内。

您可以通过在 add_user 函数中添加global $dbco;来访问它以使其可用,也可以改用$GLOBALS['dbco']

尝试:

function add_user($username, $email, $password_text, $copasswd_text) {
    global $dbco;
    // rest of code...
}
在函数

外部定义的变量在函数内不可用,除非您传入或使用 global 。 同样,函数中定义的变量在函数外部不可用(并且在函数返回时被释放)。