Фатална грешка: Неуловена грешка: Извикване на 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);

След като сте сигурни, изявлението за подготовка работи по следния начин:

$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
Благодаря ти! Как е това не ми идва на ум.. Мислех, че това работи само с метода post. Отървавам се от това невежество. Благодаря отново. - person ; 22.09.2016