2016-08-08 54 views
0

Ich füge eine Zeile in die Datenbank ein. Es funktioniert perfekt, aber wenn ich die PDO-Fehlermeldung aktiviere, bekomme ich diesen Fehler. Ich möchte genau wissen, warum dieser Fehler auftritt, damit ich die Fehlerbenachrichtigung während der Entwicklung aktivieren kann. Hier ist mein Code:Brauchen Sie Hilfe, um Fehler zu finden SQLSTATE [HY000]: Allgemeiner Fehler

Aktivieren der Fehler, den ich in meiner DB Klasse setzen

$this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

Datenbankverbindung in meiner Klasse

try { 
    $this->_pdo = new PDO('mysql:host=' . Config::get('mysql/host') . ';dbname=' . Config::get('mysql/db'), config::get('mysql/username'), config::get('mysql/password')); 
    $this->_prefix = ''; 
} catch (PDOException $e) { 
    die($e->getMessage()); 
} 

Hier wird das Verfahren, in dem ich rufe die Abfrage

public function query($sql, $params = array()) { 
    $this->_error = false; 
    if($this->_query = $this->_pdo->prepare($sql)) { 
     $x=1; 
     if(count($params)){ 
      foreach($params as $param){ 
       $this->_query->bindValue($x, $param); 
       $x++; 
      } 
     } 

     if($this->_query->execute()){ 
      $this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ); 
      $this->_count = $this->_query->rowCount(); 
     } else { 
      $this->_error= true; 
     } 

    } 

    return $this; 
} 

Dies ist die Einfügefunktion in meiner DB-Klasse

Dies ist die Funktion in meiner Tour-Klasse, die alle Daten durch Aufruf der Einfügefunktion in der DB speichert.

public function create($fields= array()){ 
    if(!$this->_db->insert("tours", $fields)){ 
     throw new Exception('There was a problem creating Tours.' .print_r($this->_db->error())); 
    } 
} 

Der Grund ATTR_ERRMODE zu halten ermöglichen, weil es mir helfen, während meiner Entwicklung zu debuggen und ich habe noch viele Seiten zu entwickeln. Ich habe schon viele ähnliche Fragen besucht, aber sie sind mit Fehlern verbunden. Ich bekomme normalerweise keine Fehler, aber nur, wenn ich dieses Fehler-Messaging-System aktiviert habe, das mir alles im Detail sagt.

Das ist anders als andere Frage, da es mir keinen Fehler gibt, aber es Zeile erfolgreich einfügen, aber wenn ich den Fehlermodus aktivieren, dass es mir einen Fehler gibt. Ein anderer verwende ich dynamische Parameter, also kann Doppelpunkt nicht hinzufügen: um es zu korrigieren. Dieselbe Funktion, die zum Abfragen der Datenbank verwendet wird.

+3

Mögliches Duplikat von [PDO-Fehler: "SQLSTATE \ [HY000 \]: Allgemeiner Fehler" beim Aktualisieren der Datenbank] (http://stackoverflow.com/questions/12979510/pdo-error-sqlstatehy000-general-error-when- update-database) – aynber

+0

Bitte erläutern Sie, was Sie mit duplizieren meinen, es läuft nur einmal. – KamalPanhwar

+0

Sie vermuten, dass diese Frage bereits beantwortet wurde. Klicken Sie auf den Link, um die Frage anzuzeigen, von der sie glauben, dass sie Ihr Problem lösen wird. – Henders

Antwort

0

Meine bescheidene Entschuldigung an Aynber, als er Recht hatte Ich konnte Antwort nicht verstehen Ich muss fetchAll von meiner Funktion entfernen. Also habe ich jetzt zwei Funktionen für Einfügung/Aktualisierung und eine andere für nur Abfrage erstellt. Als Antwort war da aber ich sah andere Antworten.

ich nur folgende Zeile aus meiner Anfrage Funktion

entfernt
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ); 

Dank jetzt meine Klasse ist gut, wie es die richtige Fehlerbehandlung tut.