1

我有一个自定义 CodeIgniter 库,我需要在其中运行一些数据库操作。

为了访问数据库,我执行了这个命令,这是我在 StackOverflow 上学到的:

$this->CI =& get_instance();

我知道它正在工作,因为此命令有效:

$drop_query = "DELETE FROM product_images WHERE product_id = " .  $this->CI->db->escape($product_id);
$this->CI->db->query($drop_query);  // Tested, this works.

但是,insert_batch根本不起作用。没有返回 FALSE,没有错误……没什么。它只是死了。

    $master_insert_array = array(
        array(
            'product_id' => $product_id,
            'thumb_type' => 'original',
            'filename' => $orig_file_name
        ),
        array(
            'product_id' => $product_id,
            'thumb_type' => 'small',
            'filename' => $small_file_name
        ) // Truncating the rest of this...
    );

    error_log("update_product_image_db: Insert_Batch Coming up:");

    $batch_success = $this->CI->db->insert_batch('product_images', $master_insert_array);
    error_log("\n\n".$this->CI->db->last_query()."\n");

*编辑:事实证明我的 $product_id 没有通过外键约束,导致 batch_insert 失败。*

第二个 error_log 在失败后永远不会运行。剧本就这样死了。

那么我怎样才能让 insert_batch 正确地返回一个 FALSE、一个错误或其他东西,而不是完全失败呢?

*更新:我也尝试将其放入 try/catch 块中,但没有成功。如果它未能通过外键约束,它将中止我的整个脚本。我目前认为 insert_batch 是一个写得不好的函数*

谢谢!

4

1 回答 1

1

我意识到这是一个老问题,但 Codeigniter 在第 2 版中仍然存在这个问题,所以希望这会对某人有所帮助。

无论出于何种原因,insert_batch()它都不会以与标准查询相同的方式返回。一般来说,你可以这样做:

if(!$this->CI->db->insert('product_images', $simpleArray)
{
    error_log("\n\n".$this->CI->db->last_query()."\n");
}

但正如在原始问题中发现的那样, insert_batch 不会在查询失败时返回 false 。对于insert_batch(),这种解决方法很好地解决了我的应用程序中的问题:

$this->CI->db->insert_batch('product_images', $master_insert_array);

if($this->CI->db->_error_message() != '')
{
    error_log("\n\n".$this->CI->db->last_query()."\n");
}
于 2015-05-07T19:41:17.060 回答