Вызов функции-члена prepare () для null в postgreSQL - PullRequest
0 голосов
/ 31 января 2019

Файл db.php:

<?php
class Database
{
    private $host;
    private $port;
    private $dbname;
    private $user;
    private $password;
    protected $conn;

    public function __construct($host, $port, $dbname, $user, $password) {
        $this->host = $host;
        $this->port = $port;
        $this->dbname = $dbname;
        $this->user = $user;
        $this->password = $password;
    }

    function error($error, $id)
    {
        echo $error.", ". $id;
        die;
    }

    public function connect()
    {
        $result = $this->conn = new PDO("pgsql:host=$this->host port=$this->port dbname=$this->dbname user=$this->user password=$this->password");
    }
}

и result.php:

<?php

require "db.php";

    class Result extends Database
    {
        private $save;
        public function __construct() {
            parent::__construct("127.0.0.1", 5432, "blue", "postgres", "postgres");
        }

        public function validate()
        {
            $this->connect();
            $sql = 'INSERT INTO test (name, surname, age, active) VALUES (:name, :surname, :age, :active)';
            $stmt = $this->conn->prepare($sql);
            $stmt->bindValue(':name', "Magdalena");
            $stmt->bindValue(':surname', "Blizna");
            $stmt->bindValue(':age', 29);
            $stmt->bindValue(':active', false);
            $stmt->execute();

    return $stmt;

        }
    }

$save = new Result();
$save->validate();

Я пытаюсь вставить элемент в базу данных, но php возвращает ошибку:

Неустранимая ошибка: необученная ошибка: вызов функции-члена prepare () со значением NULL

Соединение с файлом базы данных в порядке.Для связи с базой данных я использую переменную $conn из db.php.

Я редактирую функцию проверки.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Чего ты пытаешься достичь?Какую проблему вы хотите решить?

Я вижу класс Database, который кажется своего рода «фасадом» для PDO.

  • Зачем вам нужен этот фасад вместо непосредственного использования PDO на этом этапе?
  • Почему вы наследуете класс Database в Result?Я не согласен с тем, что Result "IS A" Database :):

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

0 голосов
/ 01 февраля 2019

Функция pg_connect() не возвращает объект, как new PDO(...).Он просто возвращает ресурс (некоторый идентификатор).Таким образом, вы не можете вызвать функцию prepare() на нем.Вместо этого вы должны использовать pg_prepare() вот так:

    $connection = pg_connect("my parameters");
    $statement = pg_prepare($connection, "some sql $1 $2");
    $result = pg_execute($connection, $statement, ["param1", "param2"]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...