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.

23
demandé sur joewiz 2012-08-15 22:04:39

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');
56
répondu Xeoncross 2017-11-28 23:45:24
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 instruction SELECT. Au lieu de cela, utiliser PDO::query() pour émettre une instruction SELECT COUNT(*) avec le même prédicats comme votre instruction SELECT prévue, puis utilisez PDOStatement::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 .

8
répondu DannyCruzeira 2012-08-15 18:43:25

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;
    }
}
0
répondu kjdion84 2017-01-05 16:39:25