插入查询成功但出现数据库错误?

时间:2017-09-17 03:04:48

标签: php mysql codeigniter

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中的值,我得到了正确的结果。我不知道为什么错误说他们是空的。我假设可能是因为我将整个过程分成两种方法,其中一种方法在另一种方法中,但我还没有看到它是怎样的。

1 个答案:

答案 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;
}