【问题标题】:how to use foreach to get multiple fields into table如何使用foreach将多个字段放入表中
【发布时间】:2016-06-25 16:21:04
【问题描述】:

如何使用 foreach 循环获取每个字段(品牌 ID 和品牌名称)的值并将它们插入到表 'pa_list_brands' 中?

如果我使用此代码:

  $query = db_insert('pa_list_brands')->fields(array('brand_id', 'brand_name'));
  foreach ($data as $record) {
    $query->values($record);
  }
  $query->execute();

我得到错误: “可捕获的致命错误:传递给 InsertQuery::values() 的参数 1 必须是数组,给定字符串”

所以我尝试了这段代码以查看 $record 返回的内容:

 $query = db_insert('pa_list_brands')->fields(array('brand_id', 'brand_name'));
  foreach ($data as $record) {
    print_r($record);
  }
  $query->execute();

我得到数组结果:

11Array
(
    [0] => stdClass Object
        (
            [brand_id] => 1
            [brand_name] => Gildan
        )

    [1] => stdClass Object
        (
            [brand_id] => 2
            [brand_name] => American Apparel
        )

    [2] => stdClass Object
        (
            [brand_id] => 3
            [brand_name] => Rabbit Skins
        )

    [3] => stdClass Object
        (
            [brand_id] => 4
            [brand_name] => Anvil
        )
)

谢谢你, 亚伦

【问题讨论】:

    标签: php database drupal foreach


    【解决方案1】:

    您应该尝试以下代码。以下代码将数据作为数组分配给 $query 对象类的“值”函数。

    $query = db_insert('pa_list_brands')->fields(array('brand_id','brand_name'));
    
    foreach ($data as $key=>$record) {
    
       $values[] = $record->brand_id;
       $values[] = $record->brand_name;
       $query->values($values);
       $values=null;
    }
    $query->execute();
    

    如果有什么事请告诉我。

    如果我的评论中提供的链接没有帮助,那么试试下面的代码。 您需要将对象转换为数组才能使“值”函数起作用。

    function objToArray($obj) {
        if(!is_array($obj) && !is_object($obj)) 
            return $obj;
        if(is_object($obj)) 
            $obj = get_object_vars($obj);
        return 
            array_map(__FUNCTION__, $obj);
    }
    $resultarr=objToArray($data);
    if(is_array($resultarr))
      $resultarr=$resultarr[0];
    
     $query = db_insert('pa_list_brands')->fields(array('brand_id', 'brand_name'));
     foreach ($resultarr as $record) {
       $query->values($record);
     }
     $query->execute();
    

    【讨论】:

    • 我使用了您提供的代码并确实收到了错误通知:尝试在第 48 行的“模块”中获取非对象的属性,这是导致错误的行:$values[] = $record->brand_name; $query->values($values);但奇怪的是这条线没有报错:$values[] = $record->brand_id;
    • 请查看此链接。drupal.org/node/310079。阅读给定链接中的“根据选择查询的结果插入”部分,这可能对您非常有用。谢谢
    • 如果您满意,请标记答案以纠正。谢谢
    【解决方案2】:

    这是有效的代码:

    $data = json_decode($data);
    $data = $data->results;
    
      $query = db_insert('pa_list_brands')->fields(array('brand_id', 'brand_name'));
      foreach ($data as $key => $record) {
        $values[] = $record->brand_id;
        $values[] = $record->brand_name;
        $query->values($values);
        $values=null;
      }
      $query->execute();
    

    感谢@Jitesh 提供的所有帮助和有见地的想法!没有你,我无法做到这一点。

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 1970-01-01
      • 2015-03-16
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 2021-12-27
      相关资源
      最近更新 更多