我是OOP的新手,所以我正在学习一个教程。因此,它使用以下代码连接到数据库,但在我的情况下,它没有连接
databas.php
<?php
require_once("config.php");
class MySQLDatabase {
private $connection;
function __construct() {
$this->open_connection();
}
public function open_connection() {
$this->connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);
if (!$this->connection) {
die("Database connection failed: " . mysql_error());
} else {
$db_select = mysql_select_db(DB_NAME, $this->connection);
if (!$db_select) {
die("Database selection failed: " . mysql_error());
}
}
}
public function close_connection() {
if(isset($this->connection)) {
mysql_close($this->connection);
unset($this->connection);
}
}
public function query($sql) {
$result = mysql_query($sql, $this->connection);
$this->confirm_query($result);
return $result;
}
public function mysql_prep( $value ) {
$magic_quotes_active = get_magic_quotes_gpc();
$new_enough_php = function_exists( "mysql_real_escape_string" ); // i.e. PHP >= v4.3.0
if( $new_enough_php ) { // PHP v4.3.0 or higher
// undo any magic quote effects so mysql_real_escape_string can do the work
if( $magic_quotes_active ) { $value = stripslashes( $value ); }
$value = mysql_real_escape_string( $value );
} else { // before PHP v4.3.0
// if magic quotes aren't already on then add slashes manually
if( !$magic_quotes_active ) { $value = addslashes( $value ); }
// if magic quotes are active, then the slashes already exist
}
return $value;
}
private function confirm_query($result) {
if (!$result) {
die("Database query failed: " . mysql_error());
}
}
}
$database =& new MySQLDatabase();
$db =& $database;
?>
的config.php
<?php
// Database Constants
defined('DB_SERVER') ? null : define("DB_SERVER", "localhost");
defined('DB_USER') ? null : define("DB_USER", "oop_project");
defined('DB_PASS') ? null : define("DB_PASS", "");
defined('DB_NAME') ? null : define("DB_NAME", "oop_project");
?>
function.php
<?php
function strip_zeros_from_date( $marked_string="" ) {
// first remove the marked zeros
$no_zeros = str_replace('*0', '', $marked_string);
// then remove any remaining marks
$cleaned_string = str_replace('*', '', $no_zeros);
return $cleaned_string;
}
function redirect_to( $location = NULL ) {
if ($location != NULL) {
header("Location: {$location}");
exit;
}
}
function output_message($message="") {
if (!empty($message)) {
return "<p class=\"message\">{$message}</p>";
} else {
return "";
}
}
?>
当我要测试连接时 我收到了这些错误。
Deprecated: Assigning the return value of new by reference is deprecated in J:\xampp\htdocs\oop_project\includes\database.php on line 60
Deprecated: Assigning the return value of new by reference is deprecated in J:\xampp\php\PEAR\Config.php on line 80
Deprecated: Assigning the return value of new by reference is deprecated in J:\xampp\php\PEAR\Config.php on line 166
Notice: Use of undefined constant DB_SERVER - assumed 'DB_SERVER' in J:\xampp\htdocs\oop_project\includes\database.php on line 13
Notice: Use of undefined constant DB_USER - assumed 'DB_USER' in J:\xampp\htdocs\oop_project\includes\database.php on line 13
Notice: Use of undefined constant DB_PASS - assumed 'DB_PASS' in J:\xampp\htdocs\oop_project\includes\database.php on line 13
Warning: mysql_connect() [function.mysql-connect]: php_network_getaddresses: getaddrinfo failed: No such host is known. in J:\xampp\htdocs\oop_project\includes\database.php on line 13
Warning: mysql_connect() [function.mysql-connect]: [2002] php_network_getaddresses: getaddrinfo failed: No such host is known. (trying to connect via tcp://DB_SERVER:3306) in J:\xampp\htdocs\oop_project\includes\database.php on line 13
Warning: mysql_connect() [function.mysql-connect]: php_network_getaddresses: getaddrinfo failed: No such host is known. in J:\xampp\htdocs\oop_project\includes\database.php on line 13
Database connection failed: php_network_getaddresses: getaddrinfo failed: No such host is known.
我怎么能纠正这个......?谢谢。
答案 0 :(得分:3)
“已弃用”警告是因为您正在使用
$database =& new MySQLDatabase();
替换为
$database = new MySQLDatabase();
通知是因为在尝试实例化类(新的MySQLDatabase)之前,似乎没有定义常量(DB_SERVER,...)。确保之前加载了config.php。 其他警告与这些相同的问题相关联。 config.php的include实际上包含了 j:\ XAMPP \ PHP \ PEAR \ config.php文件 不是你的本地配置文件。
答案 1 :(得分:2)
您的DB_SERVER,DB_USER,DB_PASS变量或服务器出现问题似乎不正确?如果没有弃用的oop类,你肯定会花时间尝试这个例子。
但是,首先尝试更改$ database =&amp;新的MySQLDatabase(); 更清洁的$ database = new MySQLDatabase();
答案 2 :(得分:1)
如果您想转移到PDO,那么这里是我认为您尝试实现的一个简单示例。一个CreateReadUpdateDelete(CRUD)类。
<?php
class MySQLDatabase{
public $db;
function __construct($dsn, $user=null, $pass=null){
$this->dsn = $dsn;
$this->user = $user;
$this->pass = $pass;
//Connect
$this->connect();
}
function connect(){
try{
$this->db = new PDO($this->dsn, $this->user, $this->pass);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$this->db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
}catch (Exception $e){
die('Cannot connect to databse. Details:'.$e->getMessage());
}
}
function Select($table, $fieldname=null, $fieldvalue=null){
$sql = "SELECT * FROM $table";
$sql .=($fieldname != null && $fieldvalue != null)?" WHERE $fieldname=:id":null;
$statement = $this->db->prepare($sql);
if($fieldname != null && $fieldvalue != null){$statement->bindParam(':id', $fieldvalue);}
$statement->execute();
return $statement->fetchAll(PDO::FETCH_ASSOC);
}
function Insert($table, $values){
$fieldnames = array_keys($values[0]);
$sql = "INSERT INTO $table";
$fields = '( ' . implode(' ,', $fieldnames) . ' )';
$bound = '(:' . implode(', :', $fieldnames) . ' )';
$sql .= $fields.' VALUES '.$bound;
$statement = $this->db->prepare($sql);
foreach($values as $vals){
$statement->execute($vals);
}
}
function Update($table, $fieldname, $value, $where_key, $id){
$sql = "UPDATE `$table` SET `$fieldname`= :value WHERE `$where_key` = :id";
$statement = $this->db->prepare($sql);
$statement->bindParam(':id', $id);
$statement->bindParam(':value', $value);
$statement->execute();
}
function Delete($table, $fieldname=null, $id=null){
$sql = "DELETE FROM `$table`";
$sql .=($fieldname != null && $id != null)?" WHERE $fieldname=:id":null;
$statement = $this->db->prepare($sql);
if($fieldname != null && $id != null){$statement->bindParam(':id', $id);}
$statement->execute();
}
}
//Sample Usage
$db = new MySQLDatabase('mysql:host=localhost;dbname=test','root','password');
//Multi insert:
$insert = array(array('some_col'=>'This was inserted by the $db->Insert() method'),
array('some_col'=>'Test insert 2'),
array('some_col'=>'Test insert 3'),
);
$db->Insert('pdo_test', $insert);
//Select All
$result = $db->Select('pdo_test');
/*
Array
(
[0] => Array
(
[id] => 2
[some_col] => This was inserted by the $db->Insert() method
)
[1] => Array
(
[id] => 3
[some_col] => Test insert 2
)
[2] => Array
(
[id] => 4
[some_col] => Test insert 3
)
)
*/
//Single select
$result = $db->Select('pdo_test','id','2');
/*
Array
(
[0] => Array
(
[id] => 2
[some_col] => This was inserted by the $db->Insert() method
)
)
*/
/* Delete Single record*/
$db->Delete('pdo_test', 'id', '2');
/*Delete All*/
$db->Delete('pdo_test');
//Array ( )
$result = $db->Select('pdo_test');
?>
答案 3 :(得分:0)
最佳解决方案是转到php.ini allow_url_include =开 并保存
或
使用
inlcude 'J:\xampp\htdocs\oop_project\includes\database.php';
require_once 'J:\xampp\htdocs\oop_project\includes\database.php';
根据要求,这将解决
php_network_getaddresses: getaddrinfo failed: No such host is known.