使用其他文件中的变量设置数据库连接

时间:2013-08-20 18:16:15

标签: php scope

我正在尝试为mysqli_connect语句$ dbc设置数据库连接。我让它在我的脚本中使用以下内容:

DEFINE ('DB_USER','myName';
DEFINE ('DB_PASSWORD','somePass123';
DEFINE ('DB_HOST','localhost';
DEFINE ('DB_NAME','sitename';


// make the db connection
    $dbc = @mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME)
    OR die ('Could not connect to mysql: ' . mysqli_connect_error());

然后我在SO上发布了一个关于安全性和最佳实践的问题,并被告知如果连接变量(密码,主机,dbname,用户)存在于单独的数据库配置文件的其他地方,我应该调用连接的变量从那里。

以下是config / database / php

中文件的相关片段
$config['default'] = array(
    'benchmark' => TRUE,
    'persistent' => FALSE,
    'connection' => array(
        'type' => 'mysqli',
        'user' => 'myName',
        'pass' => 'somepass123',
        'host' => 'localhost',
        'port' => FALSE,
        'socket' => FALSE,
        'database' => 'sitename',
    ),
    'character_set' => 'utf8',
    'table_prefix' => '',
    'object' => TRUE,
    'cache' => FALSE,
    'escape' => TRUE
);

所以我接着尝试了这个:

DEFINE ('DB_USER','$config['default']['connection']['user'])';
DEFINE ('DB_PASSWORD',$config['default']['connection']['pass']);
DEFINE ('DB_HOST',$config['default']['connection']['host']);
DEFINE ('DB_NAME',$config['default']['connection']['database']);


// make the db connection
    $dbc = @mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME)
    OR die ('Could not connect to mysql: ' . mysqli_connect_error());

当我尝试加载页面时出现以下错误: “未定义的变量:config”

然后我尝试了这个:

 $dbc = @mysqli_connect(
    $config['default']['connection']['host'],
    $config['default']['connection']['user'],
    $config['default']['connection']['pass'],
    $config['default']['connection']['database'])

    OR die ('Could not connect to mysql: ' . mysqli_connect_error());

// Set the encoding
mysqli_set_charset($dbc, 'utf8');

// set the query variable
$query = "SELECT MAX(rating_date) 
          AS last_date
          FROM rating
          WHERE incident_id = $incident_id;";

//connect and run the query
$result = mysqli_query($dbc, $query);

 echo $result->fetch_object()->last_date;

?>

然后产生以下错误: “致命错误:在...中的非对象上调用成员函数fetch_object()”

我不是百分之百确定这是告诉我的。昨天我了解到一个人无法直接在php中回显SQL查询,因为它是一个对象所以我剪切了粘贴部分“echo $ result-> fetch_object() - > last_date;”哪个有效。

现在似乎我试图从配置中获取变量,而不是仅仅在函数中定义它们,我可能因为范围问题而无法连接?

$ dbc连接的文件位于文件夹themes / myname / views / reports / detail.php

具有数据库配置详细信息数组的文件位于application / config / database.php

看起来像是变量范围的问题?

制作$ dbc变量的最佳做法是什么?当数据库存在于与我调用它的文件不同的目录中时,如何调用database.php中的变量?我必须包含()整个文件吗?

2 个答案:

答案 0 :(得分:1)

sane 之类的内容如下:

$dbc = @mysqli_connect(
  $config['default']['connection']['host'],
  $config['default']['connection']['user'],
  $config['default']['connection']['pass'],
  $config['default']['connection']['database'])
OR die ('Could not connect to mysql: ' . mysqli_connect_error());

使用define()您没有获得任何收益,您只是试图避免将带有您的用户名和密码的原始字符串放入mysqli_connect()调用,以防发生错误并且该行获得发送到客户端的错误消息/堆栈跟踪。

答案 1 :(得分:-1)

常量是全局的,你不需要将它们设置为全局来从内存中检索它们但变量不是,如果从函数内部调用变量$config,你有两种方法可以调用它:

  1. 在您从global $config;
  2. 调用此变量的函数的第一个开头将变量设置为全局变量

    OR

    1. 使用$GLOBALS变量$config = $GLOBALS['config'];
    2. 调用变量