我的问题是我不知道如何在导入所有行时完成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(
...
);
答案 0 :(得分:0)
您使用while(1) { ... }
的方法会创建一个无限循环,因为将一个元素附加到数组&#39; cadena&#39;导致计数高于0加上计数不能低于0
你可以尝试使用foreach而不是一会儿
foreach ($regs as $row) { ... }