我的问题是,当导入所有行时,我不知道如何完成while循环。这是Drupal 7。
如果我设置这个while
条件:while ($row = $regs->fetchAssoc())
,它永远不会进入循环。
如果我使用这个条件来打破循环:
$cadena = array();
while (1) {
$row = $regs->fetchAssoc();
$cadena[] = $row;
if (count($cadena)<0){
break;}
我得到这个错误:Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 64 bytes)
完整代码为:
$operations = array();
$items = array();
$limit = 25;
$i = 0;
$regs = db_query("SELECT * FROM {table_import_apunte} WHERE field_processed = :processed", array(':processed' => 0));
while ($row = $regs->fetchAssoc()) {
if ($i < $limit) {
$items[] = $row;
$i += 1;
} else {
$operations[] = array('csvImporter_create_nodes', array($items, 'apunte'));
$items = array();
$items[] = $row;
$i = 1;
}
}
$batch = array(
...
);
您使用while(1) { ... }
的方法会创建一个无限循环,因为将元素附加到数组"cadena"会导致计数高于0加上计数不能低于0
你可以尝试使用foreach而不是while
foreach ($regs as $row) { ... }