2017-09-22 26 views
1

J'utilise la connexion pdo pour accéder à une base de données sybase.PDO rowCount return -1

lors de l'utilisation rowCount le résultat est -1

$stmt = $dbh->prepare("select .... FROM users u WHERE u.ds_username like '%user%' order by ds_username ASC"); 
$stmt->execute(); 

$count = $stmt->rowCount(); 
+0

A partir du manuel: « . * Si la dernière instruction SQL exécutée par le PDOStatement associé est une instruction SELECT, certaines bases de données peuvent retourner le nombre de lignes retournées par cette déclaration Toutefois , ce comportement n'est pas garanti pour toutes les bases de données et ne devrait pas être invoqué pour les applications portables. * " – Qirel

+1

Pour quoi allez-vous utiliser le compte? Pour vérifier s'il y a un résultat, vous pouvez aller chercher? – Qirel

Répondre

1

Selon la documentation rowCount,

PDOStatement :: rowCount retourne() le nombre de lignes affectées par la dernière requête DELETE, INSERT, ou une instruction UPDATE exécutée par l'objet PDOStatement correspondant. Si la dernière instruction SQL exécutée par l'instruction PDOS associée était une instruction SELECT, certaines bases de données peuvent renvoyer le nombre de lignes renvoyées par cette instruction. Toutefois, ce comportement n'est pas garanti pour toutes les bases de données et ne doit pas être utilisé pour les applications portables.

et

Pour la plupart des bases de données, PDOStatement :: rowCount() ne retourne pas le nombre de lignes affectées par une instruction SELECT. Au lieu de cela, utilisez PDO :: query() pour émettre une instruction SELECT COUNT (*) avec les mêmes prédicats que votre instruction SELECT, puis utilisez PDOStatement :: fetchColumn() pour récupérer le nombre de lignes qui seront renvoyées.

Exemple

<?php 
$sql = "SELECT COUNT(*) FROM fruit WHERE calories > 100"; 
if ($res = $conn->query($sql)) { 

    /* Check the number of rows that match the SELECT statement */ 
    if ($res->fetchColumn() > 0) { 

     /* Issue the real SELECT statement and work with the results */ 
     $sql = "SELECT name FROM fruit WHERE calories > 100"; 
     foreach ($conn->query($sql) as $row) { 
      print "Name: " . $row['NAME'] . "\n"; 
     } 
    } 
    /* No rows matched -- do something else */ 
    else { 
     print "No rows matched the query."; 
    } 
} 

$res = null; 
$conn = null; 
?>