【问题标题】:Setting up a db connection using variables from another file使用来自另一个文件的变量设置数据库连接
【发布时间】:2013-08-22 22:14:13
【问题描述】:

我正在尝试为 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 上发布了一个关于安全性和最佳实践的问题,并被告知如果连接变量(密码、主机、数据库名、用户)存在于单独的数据库配置文件中的其他位置,我应该为连接调用变量从那里开始。

这里是config/database/php中文件的相关sn-p

$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());

当我尝试加载页面时产生以下错误: “未定义变量:配置”

然后我尝试了这个:

 $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()”

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

现在我似乎正在尝试从 config 中提取变量,而不仅仅是在函数中定义它们,我可能由于范围问题而无法连接?

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

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

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

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

【问题讨论】:

  • 你是否包含了配置文件?
  • 为什么要根据变量定义常量?这就像在马车上拖着一匹马……如果您要使用变量来存储配置数据,那么直接使用这些变量即可。
  • @Mathlight 没有。我应该(如果这听起来很愚蠢,我很抱歉,您可能会猜到我对 PHP 的经验水平)
  • @MarcB,只是因为这个脚本是 PHP 教科书上的一个稍微被黑的页面——这就是我在 PHP 开发中所处的位置 :-)
  • @DougFirr,是的。在使用变量之前,您应该包含/要求它。然后,如果您在脚本中插入该文件的数据,以便您可以完全访问该文件中的变量和函数。 link to php.net require_once

标签: php scope


【解决方案1】:

理智的怎么样:

$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() 调用中,以防发生错误并且该行被发送到客户端在错误消息/堆栈跟踪中。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 2021-03-28
      • 2019-06-27
      • 2019-11-01
      相关资源
      最近更新 更多