it-swarm.com.de

PHP PDO. Fehlernummer '00000', wenn die Abfrage korrekt ist

Ich habe den folgenden Code:

$sql3 = "update news set date='$time' where id='2'";
$sql3 = $connect->exec($sql3);
if(!$sql3)
{
    print_r($connect->errorInfo());
    $error = $connect->errorInfo();
    die ("Error: (".$error[0].':'.$error[1].') '.$error[2]);
}

Wenn ich das Skript starte, bekomme ich manchmal die Fehlernummer '00000'. Ich meine, es geht die IF Intro. und es ist alles zufällig. Ausgabe (manchmal):

Array ( [0] => 00000 [1] => [2] => )

Was muss ich tun, um dieses Problem zu beheben?
PS: Das Skript wird jedes Mal korrekt ausgeführt.

23

Der PDO-Fehlercode 00000 bedeutet, dass alles einwandfrei funktioniert. Der Grund dafür, dass Sie den Fehlerprüfcode treffen, ist, dass $sql3 0 zurückgibt (es wurden keine Zeilen ausgeführt) und PHP wertet dies als falsch aus. Versuchen Sie, explizit nach einem return false; zu suchen.

if($sql3 === false)
33
SomeKittens

Wenn exec keine Zeile aktualisiert, wird 0 zurückgegeben. Wenn also (! $ Sql3) false ist, sollten Sie Folgendes tun:

if($sql3 === false){

}
7
Oussama

Meiner Erfahrung nach können fehlerhaft formulierte Abfragen (Syntaxfehler) und fehlgeschlagene Abfragen (zum Beispiel eine INSERT, die nichts eingefügt hat) möglicherweise den Fehlercode 00000 FALSCH zurückgeben. Versuchen Sie, die vollständige Abfrage auf Ihrer SQL-Konsole auszuführen und zu sehen warum hat es versagt? Ich weiß wirklich nicht, warum die richtige Fehlermeldung nicht zurückgegeben wird. Hier ist ein Ausschnitt des Codes, den wir verwenden

    $r = $pdo->prepare($sql);
    if (!$r->execute($input_parameters)) { # query failed
        if ($bLogFailures) {
            error_log('query failed: ERROR['.$pdo->errorCode().':'.print_r($pdo->errorInfo(), true).'] QUERY['.$sql.']');
        }
        return false;
    }
3
Collector

00000 bedeutet, es funktioniert gut. Sie sollten Ihr If folgendermaßen ändern: $sql3 === false.

2
s.naseri

Ich hatte gerade eine ähnliche Situation in meinem PHP-Projekt - es kam vor, dass eine PDO-Ausnahme mit dem Fehlercode '00000' auftrat, als ich versuchte, eine Zeile mit einem Feld auf NULL einzufügen, während die Spalte, die das Feld in der Datenbank definiert, den Typ ENUM('0', '1') und die Einschränkung _ hatte.NOT NULL. Nachdem das Skript PHP so geändert wurde, dass an Stelle von NULL '0' steht, ist der Fehler verschwunden.


Weitere Codierungen brachten mehr Licht in die Situation - ich führte mehr als eine PDO-Anweisung innerhalb einer DB-Transaktion durch, überprüfte jedoch Fehler (im Exception-Verarbeitungsblock), die nur auf der ersten PDO-Anweisung basierten, die ausgeführt wurde, während ein echter Fehler in der dritten PDO-Anweisung auftrat.

1
user4065635

Die PDO :: exec-Anweisung gibt eine Ganzzahl zurück, um die Anzahl der betroffenen Zeilen anzugeben. Wenn also in einigen Fällen 0 Zeilen betroffen sind, würde der Fehlercode ausgelöst. 

Wenn Sie jedoch besorgt sind, ob Ihre Abfrage funktioniert hat, ist es möglicherweise besser, PDO :: query (in Bezug auf Ihren Code ($ returnObj = $ connect-> query ($ sql3) anstelle von PDO :: exec) zu verwenden.

Das $ returnObj kann dann geprüft werden, um festzustellen, ob bei der SQL-Ausführung ein Fehler aufgetreten ist, und Sie können dann Ihre SQL-Abfrage behandeln, da Sie wissen, wo der Fehler war und wo er sich befunden hat. 

Ihre beste Wette dafür wäre: 

//set PDO to throw an error so you can wrap the query in a try / catch block. 
$connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql3 = "update news set date='$time' where id='2'";
try {
     $returnObj = $connect->query($sql3);
} catch (PDOException $e) {
    print_r($returnOjb->errorInfo());
    $error = $returnObj->errorInfo();
    die ("Error: (".$error[0].':'.$error[1].') '.$error[2]);
}
1
Bryan Teague

Ich hatte das gleiche Problem. Es hat mich auch sehr gequält, aber schließlich herausgefunden.

Angenommen, Sie haben 7 Spalten in Ihrer Tabelle.

Sie fügen Daten in 4 von ihnen ein.

Wenn für die restlichen 3 Spalten der Standardwert nicht festgelegt ist (sagen Sie NULL for alpha-numeric columns, CURRENT_TIMESTAMP for date-time related columns etc.), tritt das oben angegebene Problem auf.

Wenn Sie Daten in alle diese 7 Spalten einfügen odermindestens in den Spalten, für die kein Standardwert festgelegt ist , erhalten Sie keine Fehler und Daten werden eingefügt.

0
bantya