PHP PDO SQL只返回一行数据而不是所有行

时间:2017-11-27 00:22:59

标签: php mysql pdo

我正在使用PHP PDO扩展来创建数据库类别表中所有项目的列表。 预期结果不正确,只返回一行数据而不是全部 预期的行。 通过在phpMyAdmin控制台中运行相同的SQL语句,我得到了预期的结果 所有数据行的结果。 我需要知道我用pdo忽略了什么。

当前代码:

    $catId = 0;   

    $sql = "SELECT *
            FROM category
            WHERE cat_parent_id = :catId
            ORDER BY cat_name";

    $_stmt = $this->_dbConn->prepare($sql);
    $_stmt->bindParam(":catId", $catId, PDO::PARAM_INT);  
    $_stmt->execute();

    $rows = $_stmt->fetch(PDO::FETCH_ASSOC);    

    // display PDO result - only getting one row instead of all rows.       
    print_r($rows);

    Array ( [cat_id] => 3 
            [cat_parent_id] => 0 
            [cat_name] => Shop 
            [cat_description] => Seminars 
            [cat_image] => c72e.gif 
            )

    // NOTE: By running the same SQL within the phpMyAdmin 
    // console I get the expected results with all rows.
    Array ( [cat_id] => 3 
            [cat_parent_id] => 0 
            [cat_name] => Shop 
            [cat_description] => Seminars 
            [cat_image] => c72e.gif 
           ),
          ( [cat_id] => 1 
            [cat_parent_id] => 0 
            [cat_name] => Site Map 
            [cat_description] => List content links 
            [cat_image] => c83b.gif 
           )

1 个答案:

答案 0 :(得分:2)

PDOStatement::fetch()一次只能返回1行。

您可以使用PDOStatement::fetchAll()

header-includes:
  - \usepackage{changepage}
  - \usepackage{xcolor}
  - \usepackage{etoolbox}\BeforeBeginEnvironment{verbatim}{\begingroup\color{gray}\footnotesize\begin{adjustwidth}{.5cm}{.5cm}}\AfterEndEnvironment{verbatim}{\end{adjustwidth}\endgroup}

或创建一个循环,您可以继续调用$rows = $_stmt->fetchAll(PDO::FETCH_ASSOC); ,直到它返回PDOStatement::fetch()

false

但是后一个例子有点多余,如果你想要同时获取所有行,除非你想要解决一些内存问题。