-2

私はディレクトリ構造を持っています:

app
cofig
 config.php
classes
 db.class.php
index.php 

config.php:

<?php

define('DB_HOST', 'localhost'); 
define('DB_USER', 'root'); 
define('DB_PASS', ''); 
define('DB_NAME', 'db_name');  

デシベル.クラス.php:

<?php 
include "config/config.php";

class DB {

private $conn;
private $results;

public function __construct() {

$this->conn = mysql_connect(DB_HOST, DB_USER, DB_PASS);//**This doesn't work**
mysql_select_db(DB_NAME, $this->conn);
}

}
?>

index.php で $db クラスのインスタンスを作成しようとすると、エラーが発生します (クラスで DEFINED 変数を取得できません)

4

4 に答える 4

3

このディレクトリ構造を持つ:

app
config
 config.php
classes
 db.class.php
index.php 

を使用するように強制します:またはルートに移動して実行include('../config/config.php');する絶対値を定義します: 。PATHinclude(PATH.'config/config.php');

あなたは、私が思うに、存在しないとinclude "config/config.php";解釈されます。include('root/classes/config/config.php')

とにかく、Samyが提案したように、コンストラクターを介して定数をクラスに渡して、異なるデータベース変数との複数の接続に同じクラスを使用できるようにする必要があります。

また、mysqlまたはmysqli関数を使用することはもうお勧めしません。PDOについて学びます。

于 2012-06-05T17:41:48.957 に答える
2

ディレクトリ構造の「cofig」がタイプミスであると想定して、次を使用します。

include("../config/config.php");
于 2012-06-05T17:41:05.060 に答える
2

ディレクトリ構造によると、インクルードパスは「../config/config.php」である必要があります。includeを使用しているため、致命的なエラーがスローされず、ファイルがインクルードされているかどうかに関係なくコードの実行が続行されます。ここでは、コードに従ってファイルは含まれていません。これを試して

  <?php 
include "../config/config.php";

class DB {

    private $conn;
    private $results;

    public function __construct() {

        $this->conn = mysql_connect(DB_HOST, DB_USER, DB_PASS);//**This doesn't work**
        mysql_select_db(DB_NAME, $this->conn);
     }

 }
?>
于 2012-06-05T17:44:09.517 に答える
1

これらの変数をパラメーターとしてクラスに渡します。とにかくきれいです。

class DB {
    public function __construct($host, $dbName, $user, $password) {
        $this->conn = mysql_connect($host, $user, $password);
        mysql_select_db($dbName, $this->conn);
    }
}

new DB(DB_HOST, DB_NAME, DB_USER, DB_PASS);

ちなみに、mysql_関数は廃止予定です

于 2012-06-05T17:31:26.933 に答える