我的php函数无法识别在同一文件中包含的另一个php文件中定义的变量。 dbconnect.php使数据库连接。 add_user.php具有add_user函数,该函数使用该数据库连接$ dbco。我收到一条错误消息,说没有为此函数调用定义$ dbco:mysql_select_db("luxcal", $dbco);
这一定是非常明显的,但我不知道发生了什么。
dbconnect.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']));
?>
答案 0 :(得分:2)
尝试改为使用Singleton数据库类。在您的情况下,您最终可能会遇到许多不同的数据库连接。
这样的事情(从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 ...");
答案 1 :(得分:0)
变量$dbco
在函数add_user
中不可用,因为它不在函数的variable scope中。
您可以在global $dbco;
功能中添加add_user
以使其可用,或者您可以使用$GLOBALS['dbco']
来访问它。
尝试:
function add_user($username, $email, $password_text, $copasswd_text) {
global $dbco;
// rest of code...
}
函数内部定义的变量在函数内部不可用,除非您将它们传入或使用global
。类似地,函数中定义的变量在函数外部不可用(并且在函数返回时释放)。