Mysql
 sql >> база данни >  >> RDS >> Mysql

PDO Фатална грешка:Извикване на членска функция подготви() за не-обект

Има няколко проблема с вашия код.

Две бяха обяснени в другия отговор, което ще направи кода ви работещ (в крайна сметка всичко беше развалено), но все още е грешен подход, който ще свърже към базата данни толкова пъти, колкото обекти имате .

Променете класа DatabaseConnection по този начин

class DatabaseConnection{
    public $pdo;
    public function __construct(){
        $user = 'root';
        $pass = '';
        $dsn  = 'mysql:charset=utf8;dbname=test;host=localhost;charset=utf8';
        $opt  = array(
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        );
        $this->pdo = new PDO($dsn, 'root', '', $opt);
    }
}

Променете конструктора на LoginRegister по този начин

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

И направете register.php по този начин

require_once "functions.php";
$db = new DatabaseConnection();
$user = new LoginRegister($db->pdo);

и след това в LoginRegister използвайте $this->db вместо $pdo докрай.

Основната идея да се направи $db връзката външна услуга за класа на приложението. В противен случай всичко ще бъде същото като презряния глобален, но само в друга форма.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да считате NULL като MAX дата, вместо да я игнорирате в MySQL?

  2. MySQL ORDER BY DESC е бърз, но ASC е много бавен

  3. Пропускане на колона при вмъкване в MySQL

  4. Предупреждение:mysqli_connect():Неизвестен хост на MySQL сървър

  5. Mysql стоп думи и съвпадение