【问题标题】:PHP constant not definedPHP 常量未定义
【发布时间】:2014-05-07 15:52:34
【问题描述】:

我正在处理一个数据库项目,我创建了一个单独的文件来保存所有数据库信息名称“config.php”。对于数据库,我在同一目录中保留了另一个“database.php”文件。

------------config.php--------------

<?php
defined('DB_SERVER') ? null : define('DB_SERVER',"localhost");
defined('DB_USER')   ? null : define('DB_USER',"gallery");
defined('DB_PASS')   ? null : define('DB_PASS',"phpOTL123");
defined('DB_NAME')   ? null : define('DB_NAME',"photomania");
?>

------------databae.php-------------

<?php
require_once("config.php");
class MySQLDatabase{
    private $conn;

    function __construct(){
        $this->open_connection();
    }
    public function open_connection(){
        $this->conn = mysqli_connect(DB_SERVER,DB_USER,DB_PASS);
        if(!$this->conn){
            die("Database Connection Failure :(".mysql_errno());
        }else{
            $db_select = mysqli_select_db($this->conn,DB_NAME);
            if(!$db_select){
                die("Can't select the database".mysql_errno());
            }
        }
    }
    public function close_connection(){
        if(isset($this->conn)){
            mysqli_close($this->conn);
            unset($this->conn);
        }
    }
}

$database = new MySQLDatabase;
?>

问题是当我在索引文件中包含 database.php 时使用

require_once("../includes/database.php");

它给出了以下错误。


注意:使用未定义的常量 DB_SERVER - 在 C:\XAMPP\htdocs\gallery\includes\database.php 在第 11 行

注意:使用未定义的常量 DB_USER - 在 C:\XAMPP\htdocs\gallery\includes\database.php 在第 11 行

注意:使用未定义的常量 DB_PASS - 在 C:\XAMPP\htdocs\gallery\includes\database.php 在第 11 行

警告:mysqli_connect():php_network_getaddresses:getaddrinfo failed:不知道这样的主机。在 C:\XAMPP\htdocs\gallery\includes\database.php 在第 11 行

警告:mysqli_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo 失败:不知道这样的主机。在 C:\XAMPP\htdocs\gallery\includes\database.php 在第 11 行数据库 连接失败:(


任何帮助??????

【问题讨论】:

  • 旁注:您将mysql_mysqli_ 混合在一起
  • config.php中的代码直接复制到database.php中是否也有同样的问题?
  • @Barmar OP 是不是在构造中缺少$this-&gt;conn = $conn;,因为$conn 是私有的?
  • 我不这么认为。在 PHP 中,您总是使用 $obj-&gt;name 语法访问属性。
  • 好的。好吧,我用同一个文件夹中的两个文件测试了 OP 的代码,没有遇到任何问题,所以据我所知,这只是一个路径问题。 @Barmar

标签: php mysql database


【解决方案1】:

你的问题似乎出在下面一行

require_once("config.php");

尝试用

替换它
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . "config.php");

【讨论】:

  • 其实这两个文件都在同一个目录下。你能告诉我如何在这种情况下使用这个实现吗?
  • 它将适用于您当前的目录结构。 dirname(__FILE__) 返回当前文件的绝对路径(不包括文件名)
  • @user3409278 开始接受答案。您在your other question 中声明in your comment “此解决方案有效,但我还有另一个问题,...” 但您没有单击勾号/复选标记,直到它变为绿色。这样做时,问题被标记为已解决。请为那个问题和这个问题这样做。这就是 SO 系统的工作原理,并以此为基础构建并保持其持续成功。
  • user3409278 同样,正如@Fred-ii- 所提到的,最好的做法是勾选解决您问题的答案。这是您至少可以回馈帮助您解决问题的网站。
  • @Ejay 哦,好吧,你得到了我的 +1。至少有“那个”;-)
【解决方案2】:

如果您必须在定义常量之前检查它是否已定义,那么您的结构有误。只需删除检查,定义它们,并始终使用 require_once。

【讨论】:

  • 嗨,是的,我也试过了,但输出相同。当我在配置文件中回显常量时,它可以工作,但是在数据库中完成时,它会失败。当我在索引文件中同时包含配置和数据库时,它就可以工作了。
  • 那么你的常量实际上并没有定义。当您说“包含”时,您使用的是include 还是require
  • @Jessica 你可以在发布的代码中看到他在使用什么。
  • 您的常量被定义为错误告诉您的是注意DB_SERVER 和其他将被视为字符串。然后发现它们是常数。根据我在下面的答案更改它们,它应该可以工作。您无需检查它们是否为 defined,因为您使用 REQUIRE 包含的文件定义它们。
  • @Seti 不,这不是通知告诉你的。该通知说,由于它找不到名为 DB_SERVER 的常量或变量 $DB_SERVER,因此将其视为文字字符串 'DB_SERVER' 的拼写错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多