【问题标题】:PHP - Codeigniter removing dash and brackets while inserting to DBPHP - Codeigniter 在插入数据库时​​删除破折号和括号
【发布时间】:2013-08-24 19:09:14
【问题描述】:

所以我尝试在某种程度上对此进行调试,但我不知道为什么会这样。因此,在从 excel 文件中检索信息后,我尝试使用数据库,在大多数情况下,这是可行的,但我有 2 个例外让我很难过。首先是零件号。在 db 中插入(例如:sxrv-11 变为 sxrv11)和第二个括号(例如:(pv) 转换为 1 时,删除了“-”,因此 (pv)tr55x 将变为 1tr55x)

这里是一个数组的 var_dump 示例:

array(20) {
  ["stock_no"]=>
  float(127)
  ["part_no"]=>
  string(9) "SIFR6A-11"
  ["pop_code"]=>
  string(3) "D-N"
  ["jobber"]=>
  float(15.2)
  ["sell_out"]=>
  string(0) ""
  ["suggested_qty"]=>
  float(4)
  ["box_qty"]=>
  string(1) "1"
  ["case_qty"]=>
  float(120)
  ["description"]=>
  string(50) "LASER IRIDIUM SPARK PLUG / BOUGIE IRIDIUM AU LASER"
  ["individual_upc"]=>
  string(12) "087295101278"
  ["box_upc"]=>
  string(12) "087295001271"
  ["case_upc"]=>
  string(14) "10087295001278"
  ["part_status"]=>
  string(0) ""
  ["product_desc"]=>
  string(0) ""
  ["box_size"]=>
  string(0) ""
  ["fk_id_brand"]=>
  int(1)
  ["fk_id_category"]=>
  string(1) "1"
  ["fk_id_subcategory"]=>
  string(1) "5"
  ["description_en"]=>
  string(24) "laser iridium spark plug"
  ["description_fr"]=>
  string(23) "bougie iridium au laser"
}

这是使用该数据数组插入的插入函数:

public function insert_product($product)
{
    echo "<pre>";
    var_dump($product);
    echo "</pre>";
    $this->db->set('fk_id_category', $product['fk_id_category']);
    $this->db->set('fk_id_subcategory', $product['fk_id_subcategory']);
    $this->db->set('fk_id_brand', $product['fk_id_brand']);
    $this->db->set('stock_no', $product['stock_no']);
    $this->db->set('part_no', $product['part_no']);
    $this->db->set('pop_code', $product['pop_code']);
    $this->db->set('jobber', $product['jobber']);
    $this->db->set('part_status', $product['part_status']);
    $this->db->set('sell_out', $product['sell_out']);
    $this->db->set('suggested_qty', $product['suggested_qty']);
    $this->db->set('box_qty', $product['box_qty']);
    $this->db->set('case_qty', $product['case_qty']);
    $this->db->set('description_en', $product['description_en']);
    $this->db->set('description_fr', $product['description_fr']);
    $this->db->set('product_desc', $product['product_desc']);
    $this->db->set('box_size', $product['box_size']);
    $this->db->set('individual_upc', $product['individual_upc']);
    $this->db->set('box_upc', $product['box_upc']);
    $this->db->set('case_upc', $product['case_upc']);
    $this->db->insert('product');
}

一旦进入数据库,它就会被修改为前面描述的示例。我尝试了不同的 mysql 排序规则,但没有任何改变。

关于这一切的最奇怪的部分是“pop_code”在插入数据库时​​保留了“-”。它们分别是 varchar() 20 和 5。

我不知道这是 PHP 问题、codeigniter 问题、mysql 问题还是 phpmyadmin 问题。有人知道吗?

【问题讨论】:

  • 在你的 ->insert();添加以下 die($this->db->last_query());把输出发回这里看看有什么问题。

标签: php mysql database codeigniter insert


【解决方案1】:

Codeigniter active record insert set() 函数还将接受一个可选的第三个参数 ($escape),如果设置为 FALSE,它将防止数据被转义。为了说明区别,这里使用了带和不带转义参数的 set()。

试试这个:$this-&gt;db-&gt;set('part_no', $product['part_no'], FALSE);

【讨论】:

  • 好的,所以将参数设置为 false 删除字符串周围的单引号,并给我一个 db 错误,因为无法识别“-”。所以例子 'sss-11' 变成 sss-11
  • 您可以尝试插入$this-&gt;db-&gt;set('part_no', $product['pop_code']); 吗?查看将 pop_code 值插入 part_no 时会发生什么。
  • 所以最奇怪的事情发生了,我将 part_no 设置为插入 pop_code 并且它仍在添加 part_no(不正确的那个)。
  • 我什至完全删除了该行,手动删除了表格(无论如何,我的代码在每次上传时都会这样做)并且插入仍然添加相同的 part_no 我非常困惑。
  • 您确定当您的表单发布时,它涉及到正确的控制器和操作?
【解决方案2】:

我认为问题出在你的数据库字段数据类型上,

检查列的数据类型,如果要添加带有字符的值,请将它们更改为VARCAHR

试试

ALTER TABLE tablename MODIFY columnname VARCHAR;

你也可以描述一下你的表格结构

DESCRIBE tableName;

【讨论】:

    猜你喜欢
    • 2022-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 2016-06-06
    • 2011-02-12
    • 2019-11-02
    • 2011-08-25
    相关资源
    最近更新 更多