testQuery()是我用来从表CATEGORIES
获取所有行的方法public function __construct()
{
self::$tdb = Database::getConnection();
}
#mock query to pull results from db
public function testQuery()
{
$queryAA = "SELECT cat_name, cat_description, cat_id FROM CATEGORIES";
$stmtAA = self::$tdb->prepare($queryAA);
if ($stmtAA->execute() == true)
{
print("Execution was successful");
return $stmtAA->fetch(PDO::FETCH_ASSOC);
}
else
{
print("Warning statment did not successfully execute");
}
}
我通常使用fetchAll()但我被告知要使用fetch,因为它不会占用太多内存。 但是我无法使用fetch()和下面的代码检索多行。
$test = new test();
$results = $test->testQuery();
foreach ($results as $row)
{
print_r($row);
}
它只获取1行。那么如何检索和打印多行?之前提到过使用迭代,但我不确定是否实现它。任何帮助将不胜感激。谢谢!
答案 0 :(得分:2)
Fetch确实一次从数据库中提取一个数据,但您需要遍历这些行,直到获得所有数据。
您可能希望将其弹出一个循环以获取所有数据:
$stmtAA->fetch(PDO::FETCH_ASSOC);
这样的事情可以解决问题:
while($row=$this->prepared->fetch(PDO::FETCH_ASSOC))
{
$this->ID=$row['id'];
$something=$row['something'];
}
取决于您是填充变量还是在对象中包含代码。
答案 1 :(得分:1)
您只需返回语句对象即可 或者,如果要封装它(以便它只能用于获取数据),请使用the SPL's IteratorIterator
return new IteratorIterator($stmtAA);
然后你可以使用
foreach( testQuery() as $row) { ... }
在你的剧本中。