Heim  >  Artikel  >  Backend-Entwicklung  >  Notizen 004 PHP POD-Studiennotizen 03

Notizen 004 PHP POD-Studiennotizen 03

黄舟
黄舟Original
2016-12-26 09:31:551077Durchsuche

1. Verbindungsaufbau

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
? ;

2. Verbindungsfehlerbehandlung


try {
$dbh = new PDO( 'mysql :host=localhost;dbname=test', $user, $pass);
foreach($dbh->query('SELECT * from FOO') as $row) {
print_r($row );
}
$dbh = null;
} Catch (PDOException $e) {
print "Error!: " . $e->getMessage() "
die();
}
?>

Verbindung schließen



$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// Verbindung hier verwenden

// Jetzt ist der Lauf abgeschlossen, schließen Sie die Verbindung hier $dbh = null; ?>

Transaktion


Nicht alle Datenbanktransaktionen werden unterstützt Daher muss PDO beim ersten Öffnen einer Verbindung im sogenannten „Autocommit“-Modus ausgeführt werden. Der Autocommit-Modus bedeutet, dass jeder Abfragelauf eine eigene implizite Transaktion hat, wenn die Datenbank dies unterstützt, oder keine, wenn die Datenbank keine Transaktionen unterstützt. Wenn eine Transaktion erforderlich ist, muss diese mit der Methode PDO::beginTransaction() gestartet werden. Wenn der zugrunde liegende Treiber keine Transaktionen unterstützt, wird eine PDOException ausgelöst (dies ist unabhängig von den Fehlerbehandlungseinstellungen ein schwerwiegender Fehlerzustand). Sobald eine Transaktion gestartet wurde, kann sie mit PDO::commit() oder PDO::rollBack() abgeschlossen werden, je nachdem, ob der Code in der Transaktion erfolgreich ausgeführt wurde.

Wenn das Skript endet oder die Verbindung geschlossen werden soll und eine nicht abgeschlossene Transaktion vorliegt, setzt PDO die Transaktion automatisch zurück. Diese Sicherheitsmaßnahme trägt dazu bei, Inkonsistenzen zu vermeiden, wenn das Skript unerwartet beendet wird. Wenn die Transaktion nicht explizit festgeschrieben wird, wird davon ausgegangen, dass ein Fehler aufgetreten ist, sodass ein Rollback durchgeführt wird, um die Sicherheit der Daten zu gewährleisten.

Im folgenden Beispiel wird davon ausgegangen, dass eine Reihe von Einträgen für einen neuen Mitarbeiter erstellt und ihm die ID 23 zugewiesen wird. Neben der Erfassung der Grunddaten der Person ist auch die Erfassung ihres Gehalts erforderlich. Es ist einfach, beide Aktualisierungen separat durchzuführen, aber indem Sie sie in PDO::beginTransaction()- und PDO::commit()-Aufrufe einschließen, stellen Sie sicher, dass niemand anderes die Änderungen sehen kann, bis sie abgeschlossen sind. Wenn ein Fehler auftritt, macht der Catch-Block alle seit dem Start der Transaktion vorgenommenen Änderungen rückgängig und gibt eine Fehlermeldung aus.


try {
$dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2',
array(PDO::ATTR_PERSISTENT => true));
echo "Connectedn";
} Catch (Exception $e) {
die("Unable to connect: " . $e->getMessage ());
}

try {
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$dbh-> ;beginTransaction(); $dbh->exec("insert into staff (id, first, last) effects (23, 'Joe', 'Bloggs')"); $dbh->exec("insert into Gehaltsänderung (ID, Betrag, Änderungsdatum) Werte (23, 50000, NOW())"); $dbh->commit();

} Catch (Exception $e) { $dbh-> ;rollBack() ; echo "Failed: " . $e->getMessage(); } ?>

Das Obige ist der Inhalt von Note 004 PHP POD Study Note 03. Weitere verwandte Inhalte finden Sie hier Achten Sie auf die chinesische PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn