使用 PDO 处理数据库。
原来只能用这个循环了foreach
?
因为我在输出处得到一个数组$pdo->fetchAll()
......
以前用过while
,疑问,while
还是foreach
迭代记录更快?
我的代码有什么问题,是否可以迭代结果while
?
class bb
{
public $db_id;
public $query_id;
function connect()
{
$this->db_id = new PDO('mysql:host=localhost;dbname=table', 'user', 'pass', [
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'",
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
!$this->db_id && $this->display_error('No connect');
}
function query($sql, $value = [])
{
!$this->db_id && $this->connect();
!($this->query_id = $this->db_id->prepare($sql))
&& $this->display_error(false, $sql);
$this->query_id->execute($value);
return $this->query_id;
}
function fetchAll()
{
return $this->query_id->fetchAll();
}
function display_error($error, $sql= '')
{
die('-----------');
}
}
$pdo = new bb;
$pdo->query("SELECT * FROM `error` WHERE `code` in (?,?) ORDER BY `type` ASC", [404,410]);
//while ($r = $pdo->fetchAll())
// print('sdf');
foreach ($pdo->fetchAll() as $r)
echo $r['url'].PHP_EOL;
可以这样做:
function fetchAll()
{
return $this->fetchAll();
}
也就是说,访问对象内部、对象或其他东西。我不明白...
在您的情况下,完全可以使用 while 通过 PDO 迭代查询结果。出现此问题的原因是 fetchAll() 方法一次返回整个数据数组。
要使用 while 循环,您可以使用 fetch() 方法而不是 fetchAll() 来更改获取数据的方法。 fetch() 方法一次返回一条记录,允许您使用 while 循环。
操作方法如下:
如果您使用 fetchAll(),则 foreach 将需要更多内存,因为所有结果将立即加载。如果有大量数据,则将 while 与 fetch() 一起使用可以提高性能,因为一次加载一条记录。