5

4つの定数を定義したconfig.phpというファイルがあります。

<?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");

mysql関数は現在減価償却されているため、MYSQLIまたはPDOを調べる必要があります。

 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 に答える