我正试图通过观看lynda.com的视频来学习面向对象的PHP。问题是他们正在使用MySQL,而我正在尝试使用MySQLi。我使用的是在装有Windows7的本地系统上安装的xampp。我有一个包含以下内容的配置文件:
// Database Constants
defined('DB_SERVER') ? null : define("DB_SERVER", "127.0.0.1");
defined('DB_USER') ? null : define("DB_USER", "gallery");
defined('DB_PASS') ? null : define("DB_PASS", "phpOTL123");
defined('DB_NAME') ? null : define("DB_NAME", "photo_gallery");
然后我有一个database.php文件来进行连接:
require_once("config.php");
class MySQLDatabase {
private $conn;
function __construct() {
$this->open_connection();
}
public function open_connection() {
$this->conn = mysqli_connect('.', 'DB_USER', 'DB_PASS','DB_NAME');
// $this->conn = mysqli_connect("127.0.0.1", "gallery", "phpOTL123");
if (!$this->conn) {
die("Database connection failed: " .mysqli_connect_error($this->conn));
} else {
$db_select = mysqli_select_db($this->conn, "photo_gallery");
if(!$db_select) {
die("Database selection failed: " .mysqli_connect_error($this->conn));
}
}
}
事实上,它不会连接,但当我尝试不使用常量时,它会连接。我得到以下错误:
Unknown errror while connecting in C:'xampp'htdocs'sandbox'photo_gallery'includes'database.php on line 12.
12号线为
$this->conn = mysqli_connect('.', 'DB_USER', 'DB_PASS','DB_NAME');
我以前在一个单独的文件中使用过MySQLi,购买时没有使用常量,也没有问题。我尝试过将它们放在同一个文件(database.php)中,但仍然得到了相同的错误。我还研究了其他类似的问题,他们建议使用
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . "config.php");
但这仍然无济于事。我是不是遗漏了一些常量?
您将常量的名称作为字符串而不是其值传递,请将其更改为以下内容:
$this->conn = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
使用常量不需要引号。
主机名应该是FQDN或IP地址。此外,不应该有任何包含常量的'
。请将行更改为以下任意一行:
$this->conn = mysqli_connect('localhost', DB_USER, DB_PASS, DB_NAME);
$this->conn = mysqli_connect('127.0.0.1', DB_USER, DB_PASS, DB_NAME);
或者您需要使用已定义的常量!
$this->conn = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);