【问题标题】:Extra, blank row from PDO select on SqliteSqlite 上 PDO 选择的额外空白行
【发布时间】:2017-12-15 22:54:20
【问题描述】:

这涉及到一个 Sqlite 数据库、PHP 7 和 PDO。查询代码为:

    ...
    $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/。一旦这里描述的问题解决了,它将很快修改为做准备语句,枚举列等。)

回声报告“0 行”和“2 个图像”。 var_dump() 输出:

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

很明显,在外部数组的第一个位置有一个额外的空数组。在收集 $image 数组作为返回值的调用代码中,count($array) 给出 2 而不是 1(并且代码在每个换行符中都需要名称/值对)。

问题是,表中只有一行。这清楚地显示在命令行上:sqlite&gt; select * from images; 得到一行并且:

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

这里有什么问题?

【问题讨论】:

    标签: sql sqlite pdo count php-7


    【解决方案1】:

    不同的数组语法解决了它。

    $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"],
            ...
            );
    }
    

    我还不清楚原因,但这样可以避免异常空行。

    【讨论】:

      猜你喜欢
      • 2017-03-23
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      相关资源
      最近更新 更多