【发布时间】:2013-11-29 16:32:19
【问题描述】:
我在 3 个 PHP 文件中有一些 require“链”。 index.php 需要 db_get.php,即需要 db_cred.php。它们都在同一个目录中。
这些是代码:
index.php
<?php
require 'db_get.php';
$db = getDatabase();
var_dump($db);
?>
db_get.php
<?php
require 'db_cred.php';
function getDatabase()
{
$host = 'localhost';
$database = $db_name;
$username = $db_user;
$password = $db_pass;
$connectionString = 'mysql:host=' . $host . '; dbname=' . $database . '';
$attributes = array(
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_PERSISTENT => false,
\PDO::MYSQL_ATTR_INIT_COMMAND => 'set names utf8mb4'
);
return new \PDO( $connectionString, $username, $password, $attributes);
}
?>
db_cred.php(此文件由另一个 PHP 文件自动生成)
<?php $db_name="testdb"; $db_user="qNOSdZ"; $db_pass="cAHk8A"; ?>
我从 index.php 得到的错误:
Notice: Undefined variable: db_name in C:\xampp\htdocs\sipil\me\db\db_get.php on line 7
Notice: Undefined variable: db_user in C:\xampp\htdocs\sipil\me\db\db_get.php on line 8
Notice: Undefined variable: db_pass in C:\xampp\htdocs\sipil\me\db\db_get.php on line 9
为什么会出现这些错误?所有这些文件都在同一个目录中.. 我可能很笨,这个问题困扰了我一段时间,请帮助。
【问题讨论】:
-
$db_name/db_user/db_pass1在您的 getDatabase() 函数中未定义 - 它们根本没有定义,或者您忘记了global。如果您要在 getDatabase 函数中使用 require(db_creds.php),那么一切正常。 -
但它已经在
db_cred.php中定义了。问题是,为什么db_get.php不能得到这些变量? -
您的问题是variable scope - http://php.net/manual/en/language.variables.scope.php。在函数外部定义的变量不能在函数内部访问,除非您将它们添加为函数参数,或者将它们定义为函数内部的全局变量,或者按照 Mark B 的建议将您的
require 'db_cred.php';移动到函数内部。 -
你需要了解 PHP 变量作用域。
-
也许
global $db_name, $db_user, $db_pass会解决它?