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 :(得分:0)
在您的示例中,$info['variant_name']
为NULL,您需要从$info
函数的开头转储addProduct
它包含的内容,如下所示:
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;
}