Bei der Verwendung von PHP zum Betrieb einer Datenbank müssen wir häufig wissen, wie viele Datenzeilen sie nach der Ausführung einer SQL -Anweisung beeinflussen. Wenn Sie beispielsweise Update , Löschen oder einige Einfügenvorgänge durchführen, können wir die Anzahl der betroffenen Zeilen verstehen, ob der Vorgang erfolgreich ist oder ob der nächste Schritt erforderlich ist.
Zu diesem Zeitpunkt ist die Funktion pdostatement :: rowCount () nützlich. In diesem Artikel wird die Verwendung der RowCount () -Methode verwendet und mit tatsächlichen Codebeispielen kombiniert, um zu demonstrieren, wie auf der Grundlage der Anzahl der zurückgegebenen Zeilen bedingte Urteile vorliegt.
RowCount () ist eine Methode der Pdostatement -Klasse, die die Anzahl der von der zuletzt ausgeführten SQL -Anweisung betroffenen Zeilen zurückgibt. Der Rückgabewert dieser Funktion wird normalerweise verwendet, um festzustellen, ob die Daten tatsächlich aktualisiert oder gelöscht werden.
public int PDOStatement::rowCount();
HINWEIS: RowCount () kann sich unter verschiedenen Datenbanktreibern geringfügig unterschiedlich verhalten, insbesondere wenn sie für ausgewählte Abfragen verwendet werden, was möglicherweise nicht erwartete Ergebnisse zurückgibt.
Das Folgende ist ein Beispiel für die Aktualisierung von Benutzerinformationen in der Datenbank. Nach der Ausführung von SQL verwenden wir RowCount () , um festzustellen, ob Daten tatsächlich geändert wurden.
<?php
// Datenbankverbindungsinformationen
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8';
$username = 'dbuser';
$password = 'dbpass';
try {
// erstellen PDO Beispiel
$pdo = new PDO($dsn, $username, $password);
// Legen Sie die Handhabung des Ausnahmefehlers fest
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Vorbereiten SQL Aktualisieren Sie die Anweisung
$sql = "UPDATE users SET email = :email WHERE id = :id";
$stmt = $pdo->prepare($sql);
// Binden Sie Parameter
$stmt->bindValue(':email', '[email protected]');
$stmt->bindValue(':id', 1);
// Ausführungsanweisung
$stmt->execute();
// Holen Sie sich die Anzahl der betroffenen Zeilen
$affectedRows = $stmt->rowCount();
// Bedingte Urteilsvermögen
if ($affectedRows > 0) {
echo "Benutzerinformationen wurden aktualisiert,Gesamtwirkung {$affectedRows} OK。";
} else {
echo "Es wurden keine Benutzerinformationen geändert,Wahrscheinlich, weil sich die Daten nicht geändert haben。";
}
} catch (PDOException $e) {
echo "Datenbankfehler:" . $e->getMessage();
}
?>
$sql = "DELETE FROM users WHERE last_login < NOW() - INTERVAL 1 YEAR";
$stmt = $pdo->prepare($sql);
$stmt->execute();
if ($stmt->rowCount() > 0) {
echo "Inaktiver Benutzer wurde erfolgreich gelöscht。";
} else {
echo "Es wurde kein Benutzer gefunden, der gelöscht werden sollte。";
}
Einige Datenbanken (wie MySQL) ermöglichen es, dass RowCount () nach dem Stapelinsertion zurückgegeben werden:
$sql = "INSERT INTO logs (message, created_at) VALUES
('arbeiten1', NOW()),
('arbeiten2', NOW())";
$stmt = $pdo->prepare($sql);
$stmt->execute();
if ($stmt->rowCount() >= 2) {
echo "Protokolle wurden in Chargen geschrieben。";
} else {
echo "Protokollschreibe fehlgeschlagen oder unvollständig。";
}
Für ausgewählte Abfragen ist RowCount () Verhalten ungewiss : Es wird normalerweise empfohlen , Fetchall () oder Fetch () zu verwenden, um festzustellen, ob ein Ergebnis vorliegt.
Verwenden des richtigen Datenbanktreibers : Einige Datenbanken (z. B. SQLite) unterstützen in einigen Vorgängen nur begrenzte Unterstützung für RowCount () .
Verwechseln Sie RowCount () nicht als einziges Zeichen für eine erfolgreiche Ausführung : Es bedeutet nur "Anzahl betroffener Zeilen" und entspricht nicht "erfolgreicher Betrieb", da die Aktualisierung derselben Daten möglicherweise nicht die Anzahl der Zeilen ändert.