5

我有一个名为 config.php 的文件,我在其中定义了 4 个常量:

<?php

define('HOST','localhost');
define('USER','root');
define('PASSWORD','');
define('DATABASE','some_database');

?>

我想做的是在另一个名为 database.php 的 php 文件中使用 request_once 函数调用此脚本,该文件将使用该文件中的常量进行连接

<?php
  require_once('config.php');
  $connect = mysql_connect(HOST,USER,PASSWORD);
  $select_db = mysql_select_db(DATABASE);
?>

我得到的是没有定义主机、用户、密码和数据库。这是为什么?这是我用于连接的示例简化代码,但问题的本质在这里。先感谢您。

4

2 回答 2

1

PHP 默认不显示未定义常量的通知。因此,如果您使用未定义的常量,PHP 会将其简单地视为字符串。例如,

<?php
//define('__TEST__', 'foo');

print __TEST__; //Will print __TEST__ and raise E_NOTICE if it's enabled

如果您取消注释上面的define()PHP 将改为打印foo并且不会发出通知。

就个人而言,我建议您进行更深入的测试:

0)error_reporting(E_ALL)在 config.php 中声明
1) 在包含它之前检查文件是否存在并且可读
2) 在使用它们之前检查常量是否实际定义

最后,它会是这样的:

文件:config.php

<?php

error_reporting(E_ALL);

define('HOST','localhost');
define('USER','root');
define('PASSWORD','');
define('DATABASE','some_database');

文件:dbconnection.php

<?php

//require() will produce FATAL error if inclusion fails, so we're OK
require_once('config.php'); 


if ( defined('HOST') && defined('USER') && defined('PASSWORD') && defined('DATABASE') ){

 $connect = mysql_connect(HOST,USER,PASSWORD);
 $select_db = mysql_select_db(DATABASE);

} else {

  trigger_error('Some constants are missing', E_USER_ERROR);
}
于 2012-12-12T18:35:56.223 回答
0

您可以尝试 Include() 看看它是否有所作为。此外,如果您在本地机器上工作,您可能需要使用:

require_once(dirname(__FILE__) . "/config.php");

您应该查看 MYSQLI 或 PDO,因为 mysql 函数现在已贬值:

 define("DB_HOST", "");
 define("DB_USERNAME", "");
 define("DB_PASSWORD", "");
 define("DB_NAME", "");

    $Mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
        if ($Mysqli->connect_errno)
        {
            echo "Failed to connect to MySQL: (" . $Mysqli->connect_errno . ") " . $Mysqli->connect_error;
            $Mysqli->close();
        }
于 2012-12-12T13:54:59.280 回答