简体   繁体   English

数据库连接中的OOP php错误

[英]OOP php error in database connection

i'm new to OOP so i'm following a tutorial. 我是OOP的新手,所以我正在学习教程。 so in that it uses following codes to connect to the database but in my case it is not connecting 因此,它使用以下代码连接到数据库,但是在我的情况下,它没有连接

databas.php 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 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 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 "";
  }
}

?>

when i going to test the connection i got these errors. 当我要测试连接时,出现了这些错误。

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.

how can i correct this...? 我该如何纠正...? thank you. 谢谢。

The "deprecated" warnings are because you're using “已弃用”警告是因为您正在使用

$database =& new MySQLDatabase();

replace with 用。。。来代替

$database = new MySQLDatabase();

The notices are because it seems the constants (DB_SERVER, ...) are not defined before you try and instantiate the class (new MySQLDatabase). 发出通知是因为在尝试实例化类(新的MySQLDatabase)之前,似乎未定义常量(DB_SERVER,...)。 Make sure config.php is loaded before. 确保之前已加载config.php。 The other warnings are connected to those same issues. 其他警告与这些相同的问题有关。 The include for config.php is actually including J:\\xampp\\php\\PEAR\\Config.php not your local config file. config.php的include实际上包括J:\\ xampp \\ php \\ PEAR \\ Config.php,而不是您的本地配置文件。

It seems that something is incorrect with your DB_SERVER, DB_USER, DB_PASS variables or something is wrong with your server? 似乎您的DB_SERVER,DB_USER,DB_PASS变量有问题或服务器有问题? You should definitely invest time in trying the example without your deprecated oop classes. 在不使用不推荐使用的oop类的情况下,您绝对应该花时间尝试该示例。

But, first try changing your $database =& new MySQLDatabase(); 但是,首先尝试更改$ database =&new MySQLDatabase();。 to a cleaner $database = new MySQLDatabase(); 到一个更干净的$ database = new MySQLDatabase();

If you wanted to move over to PDO then here is a quick example of what I think your trying to achieve. 如果您想转到PDO,那么这里是我认为您要实现的目标的简要示例。 A CreateReadUpdateDelete (CRUD) class. 一个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');
?>

Best solution is goto php.ini allow_url_include = On and save 最佳解决方案是转到php.ini allow_url_include =启用并保存

or 要么

use 采用

inlcude 'J:\xampp\htdocs\oop_project\includes\database.php';
require_once 'J:\xampp\htdocs\oop_project\includes\database.php';

As per require this will resolve the 根据要求,这将解决

php_network_getaddresses: getaddrinfo failed: No such host is known.

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM