简体   繁体   中英

OOP php error in database connection

i'm new to OOP so i'm following a tutorial. so in that it uses following codes to connect to the database but in my case it is not connecting

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 "";
  }
}

?>

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). Make sure config.php is loaded before. 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.

It seems that something is incorrect with your DB_SERVER, DB_USER, DB_PASS variables or something is wrong with your server? You should definitely invest time in trying the example without your deprecated oop classes.

But, first try changing your $database =& new MySQLDatabase(); to a cleaner $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. A CreateReadUpdateDelete (CRUD) class.

<?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

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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