【问题标题】:PHP CodeIgniter Batch Insert Not Accepting My ArrayPHP CodeIgniter 批量插入不接受我的数组
【发布时间】:2011-09-21 19:34:46
【问题描述】:

我无法让下面的代码工作,它与数组的形成有关。该数组实际上是在 foreach() 循环运行几次之后构建的,然后我想批量插入,但它出现格式错误。为什么?

    foreach ($results as $r) {
$insert_array = array(
                            'ListingRid' => $r['ListingRid'],
                            'StreetNumber' => $r['StreetNumber'],
                            'StreetName' => $r['StreetName'],
                            'City' => $r['City'],
                            'State' => $r['State'],
                            'ZipCode' => $r['ZipCode'],
                            'PropertyType' => $r['PropertyType'],
                            'Bedrooms' => $r['Bedrooms'],
                            'Bathrooms' => $r['Bathrooms'],
                            'YearBuilt' => (2011 - $r['Age']),
                            'Status' => $r['Status'],
                            'PictureCount' => $r['PictureCount'],
                            'SchoolDistrict' => $r['SchoolDistrict'],
                            'ListedSince' => $r['EntryDate'],
                            'MarketingRemarks' => $r['MarketingRemarks'],
                            'PhotoUrl' => (!empty($photo_url) ? $photo_url : 'DEFAULT'),
                            'ListingAgentFirstName' => $r['ListingAgentFirstName'],
                            'ListingAgentLastName' => $r['ListingAgentLastName'],
                            'ContactPhoneAreaCode1' => (!empty($a['ContactPhoneAreaCode1']) ? $a['ContactPhoneAreaCode1'] : 'DEFAULT'),
                            'ContactPhoneNumber1' => (!empty($a['ContactPhoneNumber1']) ? $a['ContactPhoneNumber1'] : 'DEFAULT'),
                            'ListingOfficeName' => (!empty($r['ListingOfficeName']) ? $r['ListingOfficeName'] : 'DEFAULT'),
                            'OfficePhoneComplete' => (!empty($o['OfficePhoneComplete']) ? $o['OfficePhoneComplete'] : 'DEFAULT'),
                            'last_updated' => date('Y-m-d H:i:s')
                        );

                        $insert[] = $insert_array;

}

                        $this->db->insert_batch('listings', $insert);

以下是错误:

遇到了 PHP 错误

严重性:警告

消息:array_keys() [function.array-keys]:第一个参数应该 是一个数组

文件名:数据库/DB_active_rec.php

行号:1148

遇到了 PHP 错误

严重性:警告

消息:sort() 期望参数 1 是数组,给定 null

文件名:数据库/DB_active_rec.php

行号:1149

有什么想法吗?谢谢!

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    我已将您的代码减少到最低限度,它似乎可以工作。

            $i = 0;
            while ($i <= 10) {
    
                $insert_array = array(
                                            'code' => 'asd'
                );
    
                $insert[] = $insert_array;
                $i++;
            }
    
    
            $this->db->insert_batch('group', $insert);
    

    您应该检查数组的元素,将它们全部注释并逐一取消注释,直到找到罪魁祸首。

    【讨论】:

    • 我想可能是因为我的数组太大了。它工作正常,但可以一次插入批处理 1000 多条记录?
    • 我认为记录不会太多,因为您会得到不同的错误。这部分代码看起来很可疑:(!empty($a['ContactPhoneAreaCode1']) ? $a['ContactPhoneAreaCode1'] : 'DEFAULT')。我认为这段代码返回一个布尔值,因为你把它包裹在括号中。虽然我不认为这是罪魁祸首,但我同意@HerrKaleun 并且您可能会检查数组的元素,因为所有其他代码看起来都是正确的(基于 CI 文档)。
    • 我也同意 swatkins 的观点,你应该逐个检查每个数组,因为你的代码的“基本版”有效。
    【解决方案2】:

    看起来您需要将数组包装在第二个数组中。您应该提供一组行数组。

    $insert_array = array(array(...));
    

    【讨论】:

    • 如何从像 Array( [0] => Array ( [track_id] => [camp_id] => 1 [email_title] => sample ) [1] 这样的普通数组创建这样的数组=> 数组 ( [track_id] => [camp_id] => 1 [email_date] => 2013-07-02 ) [2] => 数组 ( [track_id] => [camp_id] => 1 [email_template] => 2 )
    猜你喜欢
    • 1970-01-01
    • 2013-07-26
    • 2017-08-19
    • 2012-01-28
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多