2017-07-11 10 views
0

これには、SqliteデータベースのPHP 7とPDOが含まれます。クエリのコードは次のとおりです。PDOの余分な空白行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; 
} 

(注意:これはhttp://www.sqlitetutorial.net/sqlite-php/query/に基づいてここで説明する問題が解決されるとなど、COLSを列挙、プリペアドステートメントを実行するために、すぐに改訂されます)

エコーは「0行」と「2画像」を報告します。 var_dump()出力:

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

だからはっきり外側の配列の最初の位置に余分な、空の配列があります。 $imageの配列を戻り値として収集する呼び出しコードでは、count($array)は2ではなく1を返します(また、各行に名前と値のペアが存在することを期待するコード)。

問題は、テーブルに行が1つしかないことです。これは、コマンドライン上で明確に表示されます:sqlite> select * from images;は、1行を取得し、:

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

ここで間違っているのですか?

答えて

0

異なる配列構文がそれを解決しました。

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

$images = array(); 
while($row = $stmt->fetch(\PDO::FETCH_ASSOC)){ 
    $images[] = array(
     "image_id" => $row["image_id"], 
     "date" => $row["date"], 
     "photographer" => $row["photographer"], 
     ... 
     ); 
} 

私はまだその理由が明確ではありませんが、この方法では異常な空の行は避けられます。

関連する問題