Problem with MySQL discontinued for MySQLi [duplicate]

0

I have a problem on my site, it all started after I received a MySQL discontinuation message, and they asked me to change it to MySQLi, after I changed a series of codes appeared on my page, what should I do to to fix the errors?

The initial error was, as follows:

  

Deprecated: mysql_connect (): The mysql extension is deprecated and   will be removed in the future: use mysqli or PDO instead   /home/vagalume/public_html/decor/system/database/mysql.php on line 6   Warning: session_start (): Can not send session cookie - headers already   sent by (output started at   /home/vagalume/public_html/decor/system/database/mysql.php:6) in   /home/vagalume/public_html/decor/system/library/session.php on line   11Warning: session_start (): Can not send session cache limiter -   headers already sent (output started at   /home/vagalume/public_html/decor/system/database/mysql.php:6) in   /home/vagalume/public_html/decor/system/library/session.php on line   11Warning: Can not modify header information - headers already sent by   (output started at   /home/vagalume/public_html/decor/system/database/mysql.php:6) in   /home/vagalume/public_html/decor/system/library/currency.php on line   45

The code I currently have:

<?php
final class MySQL {
    private $link;

    public function __construct($hostname, $username, $password, $database) {
        if (!$this->link = mysql_connect($hostname, $username, $password)) {
            trigger_error('Error: Could not make a database link using ' . $username . '@' . $hostname);
        }

        if (!mysql_select_db($database, $this->link)) {
            trigger_error('Error: Could not connect to database ' . $database);
        }

        mysql_query("SET NAMES 'utf8'", $this->link);
        mysql_query("SET CHARACTER SET utf8", $this->link);
        mysql_query("SET CHARACTER_SET_CONNECTION=utf8", $this->link);
        mysql_query("SET SQL_MODE = ''", $this->link);
    }

    public function query($sql) {
        if ($this->link) {
            $resource = mysql_query($sql, $this->link);

            if ($resource) {
                if (is_resource($resource)) {
                    $i = 0;

                    $data = array();

                    while ($result = mysql_fetch_assoc($resource)) {
                        $data[$i] = $result;

                        $i++;
                    }

                    mysql_free_result($resource);

                    $query = new stdClass();
                    $query->row = isset($data[0]) ? $data[0] : array();
                    $query->rows = $data;
                    $query->num_rows = $i;

                    unset($data);

                    return $query;  
                } else {
                    return true;
                }
            } else {
                trigger_error('Error: ' . mysql_error($this->link) . '<br />Error No: ' . mysql_errno($this->link) . '<br />' . $sql);
                exit();
            }
        }
    }

    public function escape($value) {
        if ($this->link) {
            return mysql_real_escape_string($value, $this->link);
        }
    }

    public function countAffected() {
        if ($this->link) {
            return mysql_affected_rows($this->link);
        }
    }

    public function getLastId() {
        if ($this->link) {
            return mysql_insert_id($this->link);
        }
    }   

    public function __destruct() {
        if ($this->link) {
            mysql_close($this->link);
        }
    }
}
?>
    
asked by anonymous 31.10.2014 / 19:42

2 answers

0

There is a part of your code that is still using mysql, and needs to be updated. Many changes have been added. Please look at the file /home/vagalume/public_html/decor/system/database/mysql.php on line 6 .

Below is an example of the functions that should be used in mysqli.

    <?php

    $link = new mysqli('localhost', 'root', '', 'loja');

    if (!$link) {
        die('Connect Error (' . mysqli_connect_errno() . ') '
                . mysqli_connect_error()); }

   $query = "INSIRA AQUI SUA SQL" or die("Error in the consult.." . mysqli_error($link));  
   $result = $link->query($query); 
   if ($result = $link->query($query))  var_dump(mysqli_fetch_array($result));   

    mysqli_close($link);

This is a basic configuration file for the database.

    
31.10.2014 / 19:51
1

Based on the file you sent, I changed the mysql functions to mysqli. See below.

Please replace with yours surgically. But before you change, make a copy of your original mysql.php file.

   <?php

final class MySQL {

    private $link;

    public function __construct($hostname, $username, $password, $database) {


        if (!$this->link = new mysqli($hostname, $username, $password, $database)) {
            trigger_error('Error: Could not make a database link using ' . $username . '@' . $hostname);
        }

        mysqli_query($this->link,"SET NAMES 'utf8'");
        mysqli_query($this->link,"SET CHARACTER SET utf8");
        mysqli_query($this->link,"SET CHARACTER_SET_CONNECTION=utf8");
        mysqli_query($this->link,"SET SQL_MODE = ''");

    }

    public function query($sql) {
        if ($this->link) {

            $resource =  $this->link->query($sql);

            if ($resource) {
                if (is_resource($resource)) {
                    $i = 0;

                    $data = array();

                    while ($result = $resource->fetch_assoc()) {
                        $data[$i] = $result;

                        $i++;
                    }

                    mysqli_free_result($resource);

                    $query = new stdClass();
                    $query->row = isset($data[0]) ? $data[0] : array();
                    $query->rows = $data;
                    $query->num_rows = $i;

                    unset($data);

                    return $query;
                } else {
                    return true;
                }
            } else {
                trigger_error('Error: ' .  mysqli_error($this->link) . '<br />Error No: ' . mysqli_error($this->link) . '<br />' . $sql);
                exit();
            }
        }
    }

    public function escape($value) {
        if ($this->link) {
            return mysqli_real_escape_string( $this->link,$value);
        }
    }

    public function countAffected() {
        if ($this->link) {
            return mysqli_affected_rows($this->link);
        }
    }

    public function getLastId() {
        if ($this->link) {
            return mysqli_insert_id($this->link);
        }
    }

    public function __destruct() {
        if ($this->link) {
            mysqli_close($this->link);
        }
    }

}

?>
    
31.10.2014 / 20:48