Неустранимая ошибка: необработанная ошибка: вызов неопределенной функции query () в C: \ xampp \ htdocs \ phpmvc \ app \ models \ Mahasiswa_model.php: 31 - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь сделать фреймворк mvc, такой как ci, но у меня проблема с этой ошибкой.ошибка "Вызов неопределенной функции query ()", но это странно, поскольку query() отлично работает в методе getMahasiswaById().

Fatal error: Uncaught Error: Call to undefined function query() in C:\xampp\htdocs\phpmvc\app\models\Mahasiswa_model.php:31 Stack trace: #0 C:\xampp\htdocs\phpmvc\app\controllers\Mahasiswa.php(27): Mahasiswa_model->tambahMahasiswa(Array) #1 C:\xampp\htdocs\phpmvc\app\core\App.php(35): Mahasiswa->tambah() #2 C:\xampp\htdocs\phpmvc\public\index.php(5): App->__construct() #3 {main} thrown in C:\xampp\htdocs\phpmvc\app\models\Mahasiswa_model.php on line 31

Это моя модель:

class Mahasiswa_model {

    private $table = 'mahasiswa';
    private $db;

    public function __construct()
    {
        $this->db = new Database;
    }

    public function getMahasiswa()
    {
        $this->db->query('SELECT * FROM '.$this->table);
        return $this->db->resultSet();
    }

    public function getMahasiswaById($id)
    {
        $this->db->query('SELECT * FROM '.$this->table.' WHERE id=:id');
        $this->db->bind('id', $id);
        return $this->db->single();
    }

    public function tambahMahasiswa($data)
    {
        $query = "INSERT INTO mahasiswa 
                    VALUES ('', :nama, :nim, :email, :jurusan)";

        $this->db-query($query);
        $this->db->bind('nama', $data['nama']);
        $this->db->bind('nim', $data['nim']);
        $this->db->bind('email', $data['email']);
        $this->db->bind('jurusan', $data['jurusan']);

        $this->db->execute();

        return $this->db->rowCount();
    }
}

Это мой контроллер:

<?php

class Mahasiswa extends Controller {

    public function index()
    {
        $data['title'] = 'List Mahasiswa';

        $data['mhs'] = $this->model('Mahasiswa_model')->getMahasiswa();
        $this->view('templates/header', $data);
        $this->view('mahasiswa/index', $data);
        $this->view('templates/footer');
    }

    public function detail($id)
    {
        $data['title'] = 'Detail Mahasiswa';

        $data['mhs'] = $this->model('Mahasiswa_model')->getMahasiswaById($id);
        $this->view('templates/header', $data);
        $this->view('mahasiswa/detail', $data);
        $this->view('templates/footer');
    }

    public function tambah()
    {
        if ($this->model('Mahasiswa_model')->tambahMahasiswa($_POST) > 0) {
            header ('Location: '. BASEURL .'/mahasiswa');
        }
    }
}

Это мое ядро ​​Database.php

<?php

class Database {

    private $host = DB_HOST;
    private $user = DB_USERNAME;
    private $pass = DB_PASSWORD;
    private $db_name = DB_NAME;

    private $dbh;
    private $stmt;

    public function __construct()
    {
        //data source name
        $dsn = 'mysql:host='.$this->host.';dbname='.$this->db_name;

        $option = [
            PDO::ATTR_PERSISTENT => true,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        ];

        try {
            $this->dbh = new PDO($dsn, $this->user, $this->pass, $option);
        } catch(PDOExeption $e) {
            die($e->getMessage());
        }
    }

    public function query($query)
    {
        $this->stmt = $this->dbh->prepare($query);
    }

    public function bind($param, $value, $type = null)
    {
        if(is_null($type)) {
            switch(true) {
                case is_int($value) :
                    $type = PDO::PARAM_INT;
                    break;
                case is_bool($value) :
                    $type = PDO::PARAM_BOOL;
                    break;
                case is_null($value) :
                    $type = PDO::PARAM_NULL;
                    break;
                default :
                    $type = PDO::PARAM_STR;
            }
        }
        $this->stmt->bindValue($param, $value, $type);
    }

    public function execute()
    {
        $this->stmt->execute();
    }

    public function resultSet()
    {
        $this->execute();
        return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    public function single()
    {
        $this->execute();
        return $this->stmt->fetch(PDO::FETCH_ASSOC);
    }

    public function rowCount()
    {
        return $this->stmt->rowCount();
    }
}

1 Ответ

0 голосов
/ 05 декабря 2018

Простая синтаксическая ошибка:

$this->db-query($query);

Смотрите, что вам там не хватает?

$this->db->query($query);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...