2017-09-17 59 views
0

Product_model.php插入查詢成功但出現數據庫錯誤?

public function addProduct($info) 
{ 
    $sql_array = array(
        $info['name'], 
        $info['SKU'], 
        $info['supplier_id'], 
        $info['type_id'], 
        $info['brand_id'], 
        $info['added_on'], 
        $info['initial_cost_price']); 

    $this->db->trans_start(); 
    //INSERT 
    $sql = "INSERT INTO 
       product(
        name, 
        SKU, 
        supplier_id, 
        type_id, 
        brand_id, 
        added_on, 
        initial_cost_price 
       ) 
      VALUES(
       ?, 
       ?, 
       ?, 
       ?, 
       ?, 
       ?, 
       ? 
      ) 
      "; 
    $query = $this->db->query($sql, $sql_array); 
    $insert_id = $this->db->insert_id(); 

    $this->addProductVariant($insert_id, $info); 
    $this->db->trans_complete(); 

    if ($this->db->trans_status() === FALSE) 
    { 
     return 'transaction failed'; 
    } return TRUE; 
} 

public function addProductVariant($product_id, $info) 
{ 
    $sql_array = array(
        $product_id, 
        $info['variant_name'], 
        $info['variant_SKU'], 
        $info['barcode'], 
        $info['wholesale_price'], 
        $info['buy_price'], 
        $info['retail_price'], 
        $info['description'], 
        $info['initial_quantity'], 
        $info['added_on'], 
        $info['last_updated'] 
        ); 

    $sql = "INSERT INTO 
       product_variant(product_id, 
        name, 
        SKU, 
        barcode, 
        wholesale_price, 
        buy_price, 
        retail_price, 
        description, 
        qty_on_hand, 
        created_on, 
        last_updated 
       ) 
      VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; 
    $query = $this->db->query($sql, $sql_array); 
} 

當我點擊提交的形式,重新加載頁面,並顯示該錯誤:

Error Number: 1048 

Column 'name' cannot be null 

INSERT INTO product_variant(product_id, name, SKU, barcode, wholesale_price, buy_price, retail_price, description, qty_on_hand, created_on, last_updated) VALUES(71, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2017-09-17 10:45:12', '2017-09-17 10:45:12') 

Filename: D:/xampp/htdocs/svcc_inv/system/database/DB_driver.php 

Line Number: 691 

但是,當我檢查數據庫,插入成功。新紀錄就在那裏。

我試着回顯$sql_array中的值,我得到正確的結果。我不知道爲什麼錯誤說他們是空的。我假設它可能是因爲我將整個過程分成兩個方法,其中一個方法在另一個方法內,但我還沒有看到那是怎麼回事。

+0

存在的關鍵$信息[ 'VARIANT_NAME']?用print_r檢查它。 –

回答

0

在您的例子$info['variant_name']爲NULL,則需要從addProduct功能的啓動裏面是什麼東西,像這樣傾倒$info

public function addProduct($info) 
{ 
    var_dump($info); 
    exit; 
    ... 
} 

另外,我要使用$this->db->trans_status()那麼你需要運行交易手動,使用$this->db->trans_begin()而不是$this->db->trans_start(),就像這樣:

$this->db->trans_begin(); 

$sql_array = array(
    $info['name'], 
    $info['SKU'], 
    $info['supplier_id'], 
    $info['type_id'], 
    $info['brand_id'], 
    $info['added_on'], 
    $info['initial_cost_price']); 

$this->db->trans_start(); 
//INSERT 
$sql = "INSERT INTO 
product(
    name, 
    SKU, 
    supplier_id, 
    type_id, 
    brand_id, 
    added_on, 
    initial_cost_price 
) 
VALUES(
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ?, 
    ? 
) 
"; 
$query = $this->db->query($sql, $sql_array); 
$insert_id = $this->db->insert_id(); 

$this->addProductVariant($insert_id, $info); 

if ($this->db->trans_status() === false) { 
    $this->db->trans_rollback(); 
    return 'transaction failed'; 
} else { 
    $this->db->trans_commit(); 
    return true; 
} 
相關問題