Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Błąd krytyczny PDO:Wywołanie funkcji członkowskiej Prepare() na obiekcie niebędącym obiektem

Istnieje kilka problemów z Twoim kodem.

Dwa zostały wyjaśnione w drugiej odpowiedzi, dzięki czemu Twój kod będzie działał (w końcu wszystko zostało zepsute), ale to nadal złe podejście, które połączy się z bazą danych tyle razy, ile masz obiektów .

Zmień w ten sposób klasę 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);
    }
}

Zmień konstruktora LoginRegister w ten sposób

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

I w ten sposób stwórz register.php

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

a następnie w LoginRegister użyj $this->db zamiast $pdo przez całą drogę.

Główny pomysł, aby połączenie $db było usługą zewnętrzną dla klasy aplikacji. W przeciwnym razie wszystko będzie takie samo, jak pogardzane globalne, ale tylko w innej formie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL nie łączy się w cmd

  2. błąd podczas instalacji caldecotta

  3. BŁĄD:Informacje dodatkowe:Tabela zewnętrzna nie ma oczekiwanego formatu

  4. MySQL/Python -> Niewłaściwa składnia symbolu zastępczego w instrukcjach?

  5. Liczba kolumn nie odpowiada liczbie wartości w wierszu 1