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 は返されず、エラーもありません... nothin. それはただ死ぬ。

    $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 が失敗したことが判明しました。*

2 番目の error_log は、失敗した後に実行されることはありません。スクリプトは死ぬだけです。

では、insert_batch が正しく FALSE、エラー、または完全な失敗以外の何かを返すようにするにはどうすればよいでしょうか?

*UPDATE: これを try/catch ブロックに入れてみましたが、成功しませんでした。外部キー制約に失敗すると、スクリプト全体が中止されます。私の現在の意見では、insert_batch はよく書かれていない関数です*

ありがとう!

4

1 に答える 1

1

これは古い質問だと思いますが、Codeigniter は v. 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 に答える