
Xperator
Ich möchte eine Bedingung haben, die eine Aktion ausführt, wenn die Zeile überhaupt nicht vorhanden ist.
$stmt = $conn->prepare('SELECT * FROM table WHERE ID=?');
$stmt->bindParam(1, $_GET['id'], PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
Versucht if (count($row) == 0)
und if($stmt->rowCount() < 0)
aber keiner von ihnen funktioniert.

Xeoncross
Sie können den Rückgabewert einfach direkt überprüfen.
$stmt = $conn->prepare('SELECT * FROM table WHERE ID=?');
$stmt->bindParam(1, $_GET['id'], PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if( ! $row)
{
echo 'nothing found';
}
/*
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); // Same here
if( ! $rows)
{
echo 'nothing found';
}
*/
Wenn Sie nach einer Überprüfung fragen ohne zu holen dann lassen Sie MySQL einfach a zurückgeben 1
(Oder verwenden Sie die COUNT()
Befehl).
$sql="SELECT 1 from table WHERE id = ? LIMIT 1";
//$sql="SELECT COUNT(*) from table WHERE param = ?"; // for checking >1 records
$stmt = $conn->prepare($sql);
$stmt->bindParam(1, $_GET['id'], PDO::PARAM_INT);
$stmt->execute();
if($stmt->fetchColumn()) echo 'found';

Danny Cruzeira
if($stmt->rowCount() == 0)
sollte gut funktionieren, da die Anzahl der Zeilen auf keinen Fall kleiner als Null sein kann.
Aus dem Handbuch:
Für die meisten Datenbanken PDOStatement::rowCount()
gibt nicht die Anzahl der Zeilen zurück, die von a betroffen sind SELECT
Erklärung. Verwenden Sie stattdessen
PDO::query()
ein ausstellen SELECT COUNT(*)
Anweisung mit denselben Prädikaten wie beabsichtigt SELECT
Anweisung, dann verwenden
PDOStatement::fetchColumn()
um die Anzahl der Zeilen abzurufen, die zurückgegeben werden. Ihre Anwendung kann dann die richtige Aktion ausführen.
Ich würde vorschlagen, das nachzulesen hier.
Hier ist, was ich in meinen Objektklassen verwende:
function exists_by_id () {
// check if object exists by id
$stm = DB::$pdo->prepare('select count(*) from `table` where `column`=:column');
$stm->bindParam(':column', $this->column);
$stm->execute();
$res = $stm->fetchColumn();
if ($res > 0) {
return true;
}
else {
return false;
}
}
10120600cookie-checkWie kann ich mit PDO prüfen, ob eine Zeile in der Datenbank vorhanden ist?yes
$stmt->rowCount()
sollte das sein, was Sie brauchen, aber prüfen Sie, ob es das ist weniger als0
wird nicht helfen – es wird sein gleicht0
oder weniger als1
– DaveRandom
15. August 2012 um 18:05 Uhr
@DaveRandom Die Dokumentation besagt, dass nicht alle Treiber verursachen
SELECT
ein gebenrowCount
. Anscheinend sollten Sie tatsächlich verwendencolumnCount
.– Waleed Khan
15. August 2012 um 18:07 Uhr
@arxanas Ein fairer Punkt, aber ehrlich gesagt ist es eine schlechte Lösung, zwei Abfragen auszuführen, nur um die Zeilenanzahl zu erhalten (wie das Handbuch vorschlägt). Sogar
$rowCount = count($rows = $stmt->fetchAll())
ist eine bessere Lösung als das, denke ich – und es wird immer noch dazu führen0
wenn es keine Zeilen gibt.– DaveRandom
15. August 2012 um 18:13 Uhr