我有一个目录结构:
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');
db.class.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变量)
答案 0 :(得分:3)
拥有此目录结构:
app
config
config.php
classes
db.class.php
index.php
会强制您使用:include('../config/config.php');
或定义一个绝对的PATH
,它会转到根目录并执行:include(PATH.'config/config.php');
。
您的include "config/config.php";
被解释为include('root/classes/config/config.php')
,我认为它不存在。
正如Samy建议的那样,你应该通过构造函数传递给类的常量,这样你就可以使用同一个类与不同的数据库变量进行多次连接。
而且,不建议再使用mysql或mysqli函数。了解PDO。
答案 1 :(得分:2)
假设目录结构中的“config”是拼写错误,请使用:
include("../config/config.php");
答案 2 :(得分: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);
}
}
?>
答案 3 :(得分: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_ functions are in the process of being deprecated。