【问题标题】:Drupal db_insert is not saving more than 440 records at a timeDrupal db_insert 一次保存的记录不超过 440 条
【发布时间】:2013-01-23 15:02:00
【问题描述】:

我正在研究 Drupal CMS,我正在解析文件并将数据存储在数据库中。

因此,如果文件中有超过 440 条记录(行),则不会进一步保存。它适用于少于 440 的行。这是一个奇怪的问题。

          $query = db_insert('table_name')->fields(array('field1', 'field2', 'field3'));

          $row = 1;
                while (($data = fgetcsv($handle, 0, ",")) !== FALSE)
                {
                    $num = count($data);

                    if ($row > 1) {

                        $query->values(
                            array(
                                'fields1' => $data[0],
                                'fields2' => $data[2],
                                'fields3' => $data[4] 
                            )); 

                        if($row == '440'){
                            break;
                        }
                    }
                    $row++;
                }


                $query->execute();

///// if($row == '440'){ 休息; }

添加是为了检查它保存了多少行。如果我将 440 增加到 460,它不会将记录保存到数据库。

【问题讨论】:

  • 我已经添加了break语句来检查它是否保存了440条记录。它适用于 440,但如果文件有 600 行,它也不会保存单行。
  • 那个测试没有意义。通过添加它你保证你不会写超过 440 行。我的意思是...如果将其设置为 441 会发生什么?根据你所说的,只有 440 行被写入。您不需要 if/break 来向您显示,除非您在记录 441 上遇到某种错误并且您希望防止这种情况发生。如果您遇到错误,您应该在问题中包含错误的详细信息。

标签: mysql drupal


【解决方案1】:
if($row == '440'){
  break;
}

去掉这个块就好了。

【讨论】:

  • 这是一个测试,如果 :: 我的 txt 文件有 1000 行,它只适用于 440 条记录。 if 语句仅用于检查它保存到 db 的行数,所以如果我将 440 增加到 460 它不会将任何内容保存到 db
  • 该语句不是任何类型的检查,它会在第 440 行之后停止 while 循环。
  • 我知道,我的意思是如果我删除此语句,则不会保存任何行。添加该代码是为了检查它允许我保存多少行,从我得到的这段代码中我只能保存 440 行,仅此而已。
  • 在 MySQL 中检查 max_allowed_packet,然后检查 Drupal 日志中是否存在它抛出的任何数据库错误。
  • max_allowed_pa​​cket 为 1 GB 并且 Drupal 日志中没有错误...这是一个非常奇怪的问题。如果我尝试通过普通 PHP 脚本来执行此操作并将 10000 行插入到表中,它工作得非常好,但是当我使用 drupal db_query->execute();它不起作用:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
相关资源
最近更新 更多