PDO / PHP-vérifier si la ligne existe
Je veux avoir une condition dans le cas où la ligne n'existe pas du tout.
$stmt = $conn->prepare('SELECT * FROM table WHERE ID=?');
$stmt->bindParam(1, $_GET['id'], PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
Essayé if (count($row) == 0)
et if($stmt->rowCount() < 0)
, mais aucun d'entre eux travaille.
3 réponses
, Vous pouvez simplement vérifier la valeur de retour directement.
$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)
{
die('nothing found');
}
/*
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); // Same here
if( ! $rows)
{
die('nothing found');
}
*/
Si vous posez des questions sur la vérification de sans récupérer, alors demandez simplement à MySQL de renvoyer un 1
(ou utilisez la commande COUNT()
).
$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()) die('found');
if($stmt->rowCount() == 0)
Devrait fonctionner correctement, car le nombre de lignes ne peut en aucun cas être inférieur à zéro.
Du manuel:
Pour la plupart des bases de données,
PDOStatement::rowCount()
ne renvoie pas nombre de lignes affectées par une instructionSELECT
. Au lieu de cela, utiliserPDO::query()
pour émettre une instructionSELECT COUNT(*)
avec le même prédicats comme votre instructionSELECT
prévue, puis utilisezPDOStatement::fetchColumn()
pour récupérer le nombre de lignes être retourné. Votre application peut alors effectuer le bon action.
Je suggère de lire à ce sujet ici .
Voici ce que j'utilise dans mes classes d'objets:
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;
}
}