Невозможно получить доступ к свойству объекта подключения php mysqli

У меня есть класс подключения, и он успешно подключается к нужной таблице db. Я выполнил запрос на вставку и хочу получить последний вставленный идентификатор соединения. Но получаю ошибку Notice: Undefined property: connection::$insert_id. Я var_dump($con) на объекте подключения, и вот что я получаю. Надеюсь, кто-нибудь поможет мне решить эту проблему. Ваша помощь очень ценится.

object(connection)#2 (5) { ["db_name"]=> string(5) "dbproject" ["db_user"]=> string(4) "root" ["db_pass"]=> string(0) "" ["db_host"]=> string(9) "localhost" ["connection"]=> object(mysqli)#3 (19) { ["affected_rows"]=> int(1) ["client_info"]=> string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: 241ae00989d1995ffcbbf63d579943635faf9972 $" ["client_version"]=> int(50012) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(20) "localhost via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(26) ["server_info"]=> string(21) "5.5.5-10.1.19-MariaDB" ["server_version"]=> int(50505) ["stat"]=> string(136) "Uptime: 302248 Threads: 1 Questions: 9631 Slow queries: 0 Opens: 65 Flush tables: 1 Open tables: 40 Queries per second avg: 0.031" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(522) ["warning_count"]=> int(0) } }

class connection {

    public $db_name;
    public $db_user;
    public $db_pass;
    public $db_host;

    public $connection;

     public function connection(){
        $this->db_host = HOST;
        $this->db_user = DB_USERNAME;
        $this->db_pass = DB_PASSWORD;
        $this->db_name = DB_NAME;

        $this->connection = new mysqli($this->db_host, $this->db_user, $this->db_pass, $this->db_name);
    }

    function connect($host, $user, $pass, $db_name) {

        $this->connection = new mysqli($host, $user, $pass, $db_name);

        if ( mysqli_connect_errno() ) {
            printf("Connection failed: %s", mysqli_connect_error());
            exit();
        }

        return $this->connection;

    }

    public function query($sql)
        {
        return $this->connection->query($sql);
        }

   }

//--------

require_once("connection.php");

class DB {

    public $con;

    function __construct()
    {
        $this->con = new connection();
    }

    function insertQuery($table, $data_array){ 

        $fields = " (";
        $values = " VALUES (";
        $x = 0;
        $y = 0;

        foreach ($data_array as $key => $value) {

            $fields.= $key;
            $values.= "'".addslashes($value)."'";

            if (sizeof($data_array)-1 != $x){
                $fields.= ",";
                $values. = ",";
            }
            else{
                $fields.= ")";
                $values. = ")";
            }
            $x++;
        }

        $sql = "insert into ".$table.$fields.$values;

        if (!$this->con->query($sql) === TRUE) {
            return "Error: " . $sql . "<br>" . $this->con->error;
        }
        else {
            $last_id = $this->con->insert_id;
            return $last_id;
        }
    }

}

«connection :: $ insert_id» звучит неправильно (объявлено как «статическое»?). Я думаю, вам лучше показать, как вы вызываете свой класс и вставляете данные. ($ conection-> insert_id; звучит лучше.)

Gavin Simpson 02.12.2018 17:55

Да, знаю. Я также добавил свой класс БД.

guitarlass 03.12.2018 01:48

Ваша функция connection () в классе подключения не вызывается. «public function connection ()» также должна быть «public function __construct ()».

Gavin Simpson 03.12.2018 06:23

Привет, я удалил оператор подключения mysqli из конструктора. включил его в метод connect (), используя определенные переменные класса и вызвав его как; $dbConnection = new connection(); $this->con = $dbConnection->connect(); работал. Понятия не имею, почему то же самое в конструкторе вело себя странно. Есть объяснения?

guitarlass 07.12.2018 16:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
626
1

Ответы 1

В конструкторе класса DB сначала вы должны установить свойства учетных данных (db_host, db_user, db_pass, db_name) и вызвать метод connection класса connection.

class DB {

    public $con;

    function __construct()
    {
        $this->con = new connection();
        $this->con->db_host = HOST; // replace HOST
        $this->con->db_user = DB_USERNAME; // replace DB_USERNAME
        $this->con->db_pass = DB_PASSWORD; // replace DB_PASSWORD
        $this->con->db_name = DB_NAME; // replace DB_NAME
        $this->con->connection();
    }

    function insertQuery($table, $data_array){ 

        $fields = " (";
        $values = " VALUES (";
        $x = 0;
        $y = 0;

        foreach ($data_array as $key => $value) {

            $fields.= $key;
            $values.= "'".addslashes($value)."'";

            if (sizeof($data_array)-1 != $x){
                $fields.= ",";
                $values. = ",";
            }
            else{
                $fields.= ")";
                $values. = ")";
            }
            $x++;
        }

        $sql = "insert into ".$table.$fields.$values;

        if (!$this->con->query($sql) === TRUE) {
            return "Error: " . $sql . "<br>" . $this->con->error;
        }
        else {
            $last_id = $this->con->insert_id;
            return $last_id;
        }
    }
 }

Другие вопросы по теме