Aktueller Standort: Startseite> Neueste Artikel> Warum bringt Ihr PDO :: Exec keine Ausnahme? Vielleicht habe ich diesen Schritt vergessen

Warum bringt Ihr PDO :: Exec keine Ausnahme? Vielleicht habe ich diesen Schritt vergessen

gitbox 2025-09-17

PDO -Fehlerbehandlungsmodus

Der Standard -Fehlerbehandlungsmodus von PDO ist pdo :: errmode_silent , was bedeutet, dass PDO, wenn ein Fehler auftritt, nicht aktiv eine Ausnahme auswirft, sondern diese stillschweigend behandelt. Dies bedeutet, dass PDO bei der Ausführung von SQL -Anweisungen auf einen Fehler stoßen oder eine Ausnahme nicht automatisch auffordert, aber Sie müssen den Fehlerstatus manuell überprüfen.

Wenn Sie in der Lage sein möchten, Ausnahmen zu fangen und zu debuggen, wenn ein Fehler auftritt, können Sie den Fehlermodus von PDO auf pdo :: errmode_exception einstellen. Auf diese Weise wird bei der Ausführung von Exec () oder einer anderen Datenbankbetriebsmethode eine Ausnahme ausgelöst, wenn ein Fehler auftritt.

Wie setze ich den PDO -Fehlerbehandlungsmodus ein?

Beim Erstellen einer PDO -Instanz können Sie den Fehlerbehandlungsmodus mit der Methode SetAtTribute () festlegen. Der folgende Code zeigt beispielsweise, wie die Ausnahmebehandlung aktiviert werden kann:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-comment">// erstellen PDO Beispiel,und setzen Sie den Fehlermodus auf eine Ausnahme</span></span><span>
    </span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'username'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>);
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">setAttribute</span></span><span>(PDO::</span><span><span class="hljs-variable constant_">ATTR_ERRMODE</span></span><span>, PDO::</span><span><span class="hljs-variable constant_">ERRMODE_EXCEPTION</span></span><span>);

    </span><span><span class="hljs-comment">// Ausführen a SQL Stellungnahme</span></span><span>
    </span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"UPDATE users SET name = 'John' WHERE id = 1"</span></span><span>;
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">exec</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-comment">// Ausnahmen fangen und umgehen</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Die Datenbankoperation ist fehlgeschlagen: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

In diesem Beispiel setzen wir pdo :: attr_errmode auf pdo :: errmode_exception , so dass PDO, wenn exec () ausgeführt wird, eine PDOException -Ausnahme auswirft und wir die Fehlermeldung über die Catch -Anweisung erfassen können.

Warum wird die Ausnahme standardmäßig nicht ausgelöst?

Der Standard -PDO -Modus für Fehlerbehandlungen besteht darin, die Leistung zu verbessern, insbesondere in Szenarien, in denen keine Fehlerbehandlung erforderlich ist, wodurch unnötige Gemeinkosten verringert werden können. Bei der Ausführung von Batch -Einfügungsvorgängen ist es dem Entwickler beispielsweise möglicherweise nicht wichtig, ob jedes Datenstück erfolgreich eingefügt wird, aber nur darauf achten, ob ein Problem mit der Gesamtausführung besteht. Wenn Sie eine Ausnahme nicht ausführen, können Sie die Komplexität des Codes verringern.

Wenn Sie jedoch strengere Fehlerprüfungen für Datenbankvorgänge durchführen müssen, wird das Einschalten des Ausnahmemodus kritisch. Andernfalls fordert PDO, selbst wenn Ihre SQL -Anweisung falsch geschrieben ist, nicht etwas falsch auf.

PDO :: Exec und Transactions

Es ist zu beachten, dass exec () nur die Fehlerbehandlung außerhalb der Transaktion durchführt. Wenn Sie exec () innerhalb der Transaktion verwenden und die Ausnahme nicht korrekt erfasst wird, wird das Commit oder Rollback der Transaktion nicht automatisch verarbeitet. Für eine bessere Kontrolle der Transaktionen sollten Sie sie in Kombination mit BeginnTransaction () und Commit () verwenden:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">beginTransaction</span></span><span>();

    </span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"UPDATE users SET name = 'Jane' WHERE id = 1"</span></span><span>;
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">exec</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);

    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">commit</span></span><span>(); </span><span><span class="hljs-comment">// Transaktionen einreichen</span></span><span>
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">rollBack</span></span><span>(); </span><span><span class="hljs-comment">// Rollen Sie Transaktionen zurück</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Transaktion fehlgeschlagen: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Dies stellt sicher, dass bei einem Fehler die Transaktionen zurückgerollt werden können und die Konsistenz im Datenbankzustand gewährleistet.

  • Verwandte Tags:

    PDO