Неустранимая ошибка: Uncaught Error: вызов undefined function_name() в var/www

Привет, ребята, я работаю над процессом вставки после подключения PDO с использованием класса. Все в порядке с подключением и отображением. Но когда я создал новую функцию в классе и набрал команды для процесса вставки, я получил эту строку ошибки:

Неустранимая ошибка: необработанная ошибка: вызов неопределенной функции db_connection_function() в /var/www/html/test/index.php:29 Трассировка стека: #0 /var/www/html/test/index.php(48): соединение ->add_member_to_table() #1 {main} добавлено в /var/www/html/test/index.php в строке 29

Эта функция выдает мне ошибку

public function add_member_to_table() {
    $this->query = db_connection_function()->prepare("INSERT INTO users(username, password) VALUES('onur', 'turali')");
    $this->query->execute();

    if($this->query == true) {
        echo "Member registered";
    } else {
        echo "Error";
    }
}

Я попробовал $this->connection_db_link.... Я хотел попробовать ввести имя функции вместо connection_db_link(имя функции для подключения к mysql). Но я думаю, что это бесполезно. Итак, как мне решить эту проблему?

Мои исходники:

<?php
    class connection{
        public $connection_db_link;
        public $db_host = "localhost";
        public $db_user = "root";
        public $db_pass = "Antalya07Ragnar";
        public $db_name = "test";

        public function db_connection_function(){
            try{
                $this -> connection_db_link = new PDO("mysql:host=$this->db_host;$this->db_name", $this->db_user, $this->db_pass);
                $this->connection_db_link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                return $this->connection_db_link;
            }catch(PDOException $e){
                echo "Error: ".$e->getMessage();
            }
        }

        public $query;

        public function add_member_to_table(){
            $this->query = db_connection_function()->prepare("INSERT INTO users(username, password) VALUES('onur', 'turali')");
            $this->query->execute();
            if($this->query == true){
                echo "Member registered";
            }else{
                echo "Error";
            }
        }

        public function display_connection(){
            if($this->connection_db_link == true){
                echo "Connection success";
            }
        }
    }

    $user = new connection;
    $user->db_connection_function();
    $user->display_connection();
    $user->add_member_to_table();
    ?>

person Community    schedule 21.09.2016    source источник
comment
это ваш метод в вашем классе, его $this->db_connection_function() и почему бы просто не создать его в конструкторе и вместо этого просто использовать его как свойство   -  person Kevin    schedule 22.09.2016
comment
Когда мне нужно подготовиться к процессу sql, я всегда использую функцию для подключения. Потому что я вызываю функцию перед командой подготовки. Но если функция подключения в другом файле, я использую конструктор. Я знаю, что это нехорошо. Но его соединение PDO с использованием класса действительно заставило меня.   -  person    schedule 22.09.2016
comment
Вы не должны создавать новое соединение каждый раз, когда вызываете функцию. Вы должны проверить, установлено ли уже значение $this->connection_db_link, а затем вернуть эту переменную вместо открытия нового соединения.   -  person Barmar    schedule 22.09.2016
comment
Да, логично. Но должен ли я вызывать функцию или просто значение PDO для процесса sql после выполнения того, что вы говорите?   -  person    schedule 22.09.2016


Ответы (1)


Изменить:

В функции add_member_to_table() измените db_connection_function() на $this->db_connection_function().


Прежде чем пытаться использовать функцию db_connection_function(), убедитесь, что вы успешно подключились к базе данных.

В вашем операторе подключения PDO отсутствует dbname=, и вместо этого он должен выглядеть так:

$this->connection_db_link = new PDO('mysql:host=$this->db_host;dbname=$this->db_name', $this->db_user, $this->db_pass);

После того, как вы уверены, оператор prepare работает следующим образом:

$stmt = $dbh->prepare("INSERT INTO users (username, password) VALUES (:username, :password)");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);

// insert one row
$name = 'onur';
$value = 'turali';
$stmt->execute();
person Rebecca Close    schedule 21.09.2016
comment
Спасибо! Как это не приходит мне в голову.. Я думал, что это работает только с почтовым методом. Я избавляюсь от этого невежества. Еще раз спасибо. - person ; 22.09.2016