Fatal error: Uncaught Error: Call to a member function prepare() on null

239
28 ноября 2020, 11:00

Uncaught Error: Call to a member function prepare() on null in C:\OSPanel\domains\localhost\index.php:42 Stack trace:

0 {main}

thrown in C:\OSPanel\domains\localhost\index.php on line 42

index.php

<?php
                         $db = new DB();
                         $stmt = $db->pdo->prepare("SELECT film_name, film_small_img FROM new_film");
                         $stmt->execute();
                   ?>
                   <?php foreach ($stmt as $row): ?>
                     <a href="films/<?php echo $row['film_name']; ?>.php">
                       <img src="<?php echo $row['film_small_img']; ?>" alt="" style="width: 100px;">
                       <p><?php echo $row['film_name']; ?></p>
                     </a>
                   <?php endforeach; ?>

config.php

<?php
      $config = [
          'title' => 'KinoKings',
          'account_name' => 'meln1337'
        ];
      $settings = [
        'host' => 'localhost',
        'dbname' => 'main',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8mb4'
      ]
   ?>

connection.php

class DB {
        /*
          The PDO Object
        */
        public $pdo;
        /*
          Connection to the DB boolean
        */
        private $isConnected;
        /*
          PDO statement object
        */
        //private $stmt;
        /*
          The DB options
        */
        // protected $opt = [
        //   PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        //   PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        //   PDO::ATTR_EMULATE_PREPARES   => false,
        // ];
        /*
          The database settings
        */
        protected $settings = [];
        /*
          The parameters of the SQL query
        */
        private $parametres = [];
        /*
          Database constructor
        */
        public function __constructor (array $settings) {
          $this->settings = $settings;
          $this->connect();
        }
        /*
          Connect to database
        */
        private function connect () {
          $dsn = 'mysql:dbname=' . $this->settings['dbname'] . ';host=' . $this->settings['host'];
          try {
            $this->pdo = new \PDO($dsn, $this->settings['user'], $this->settings['password'], [
              \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES ' . $this->settings['charset']
            ]);
            // Disable emulations and we can now log
            $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
            $this->pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);
            $this->pdo->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC);
            $this->isConnected = true;
          } catch (\PDOException $e) {
            throw new \PDOException($e->getMessage(), (int)$e->getCode());
          }
        }
        public function closeConnection () {
          $this->pdo = null;
        }
        private function init () {
          if (!$this->isConnected) {
            $this->connect();
          }
        }
      }
    ?>

Помогите исправить ошибку, пж.

Answer 1

https://www.php.net/manual/ru/language.oop5.decon.php - Разберитесь хоть изначально как "магические" методы в ООП называются и как им передавать данные, вообще научитесь правильно создавать экземпляры классов.

READ ALSO
Проблема с iconv() PHP

Проблема с iconv() PHP

Товарищи подскажите пожалуйстаПрихожу на некоторую страницу с запросом вида index

124
Cannot resolve constructor &#39;Intent(java.lang.String, java.lang.Class&lt;ru.zabbkit.android.ui.activity.SlideMenuActivity&gt;)&#39;

Cannot resolve constructor 'Intent(java.lang.String, java.lang.Class<ru.zabbkit.android.ui.activity.SlideMenuActivity>)'

пытаюсь запустить приложение скаченное с GitHub, не могу понять в чём ошибка, прошу помощи [![Cannot resolve constructor 'Intent(javalang

142
Не сохраняется таблица в бд. HSQLDB

Не сохраняется таблица в бд. HSQLDB

Изначально я написал проект с использованием spring-jdbc и бд HSQLDB не в mem режиме, сейчас решил переписать с использованием jpaКогда использовал...

112
Я понимаю, что значит синхронизация по методу, но не пойму что такое синхронизация по объекту

Я понимаю, что значит синхронизация по методу, но не пойму что такое синхронизация по объекту

Объясните мне, в чем разница между синхронизацией по методу и по объектуДля вашего правильного понимания того, как я реально это понимаю,...

124