1

私のphp関数は、同じファイル内に含まれている別のphpファイルで定義された変数を認識しません。dbconnect.phpは、データベースを接続します。add_user.phpには、そのデータベース接続$dbcoを使用するadd_user関数があります。この関数呼び出しに対して$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']));

?>
4

2 に答える 2

2

代わりに、シングルトンデータベースクラスを実行してみてください。あなたの場合、あなたは悪い多くの異なるデータベース接続で終わる可能性があります。

このようなもの(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 ...");
于 2012-04-18T18:42:42.007 に答える
0

変数は関数の変数スコープにないため$dbco、関数では使用できません。add_user

global $dbco;関数内に追加して使用可能にすることでアクセスすることも、代わりにadd_user使用することもできます$GLOBALS['dbco']

試す:

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

関数の外部で定義された変数は、それらを渡すか使用しない限り、関数の内部では使用できませんglobal。同様に、関数で定義された変数は、関数の外部では使用できません(関数が戻ると解放されます)。

于 2012-04-18T18:37:20.660 に答える