2017-07-11 3 views
0

Ceci implique une base de données Sqlite, PHP 7 et PDO. Le code de requête est:Ligne supplémentaire, vierge depuis PDO select on Sqlite

... 
    $stmt = $pdo->query('SELECT * FROM images'); 

    while($row = $stmt->fetch(\PDO::FETCH_ASSOC)){ 
     $images[] = [ 
      "image_id" => $row["image_id"], 
      "date" => $row["date"], 
      "photographer" => $row["photographer"], 
      ... 
      ]; 
    } 
    echo $stmt->rowCount() . " rows<br>"; 
    echo count($images) . " images<br>"; 
    var_dump($images); 
    return $images; 
} 

(Note:.. Ceci est basé sur http://www.sqlitetutorial.net/sqlite-php/query/ Il sera révisé prochainement faire des déclarations préparées, qui énumèrent Col., etc., une fois que le problème décrit ici est résolu)

Les échos indiquent "0 lignes" et "2 images". Les sorties var_dump():

array(2) { [0]=> array(0) { } [1]=> array(14) { ["image_id"]=> ... 

Il est donc clair, il y a un tableau supplémentaire, vide dans la première position dans le tableau extérieur. Dans le code appelant, qui recueille le tableau $image en tant que valeur de retour, count($array) donne 2 not 1 (et le code attend des paires nom/valeur dans chaque saut de ligne).

Le problème est qu'il n'y a qu'une seule ligne dans la table. Cela apparaît clairement sur la ligne de commande: sqlite> select * from images; obtient une ligne et:

sqlite> select count(*) as c from images; 
1 

Quel est le problème ici?

Répondre

0

Une syntaxe de tableau différente l'a résolu. Je ne suis toujours pas clair sur la raison, mais de cette façon évite la rangée vide anormale.