我正在使用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
)
答案 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
但是后一个例子有点多余,如果你想要同时获取所有行,除非你想要解决一些内存问题。