【问题标题】:Codeigniter Database Insert - Not Working With ArrayCodeigniter 数据库插入 - 不使用数组
【发布时间】:2014-11-24 17:05:58
【问题描述】:

我正在尝试通过 codeigniter 将一些数据插入数据库,但遇到了一些奇怪的错误。有谁知道原因:

我的插入数组($datainsert)在打印时如下:

Array ( [online_name] => Discount Store 
        [online_nameKey] => d 
        [storeGroup_ID] => 
        [CJ_ID] => 123456 
        [online_tag] => Health and Medical 
        [online_businessType] => 0 
        [online_businessTypeSub] => 0 
        [online_homepage] => http://www.discountstore.com 
        [store_ChainID] => 
        [savingsdotcom_ID] => 0 ) 

尝试打印我使用的插页:

echo $DB1->_insert('stores_online', $datainsert);

结果:

INSERT INTO stores_online (Discount Store, d, , 123456, Health and Medical, 0, 0, http://www.discountstore.com, , 0) VALUES ()

我不明白为什么它没有正确使用数组键作为第一个 () 和值。

【问题讨论】:

  • 你遇到了什么“奇怪的错误”?
  • 有什么错误?
  • 它只是发出 500 DB 错误,即使我已将所有错误设置为显示并将其放入 try/catch 循环中。但是很明显insert语句格式不正确。

标签: php mysql codeigniter codeigniter-2


【解决方案1】:

试试这个代码

$datainsert=Array ( [online_name] => Discount Store,
                    [online_nameKey] => d,
                    [storeGroup_ID] => something,
                    [CJ_ID] => 123456 ,
                    [online_tag] => Health and Medical ,
                    [online_businessType] => 0 ,
                    [online_businessTypeSub] => 0 ,
                    [online_homepage] => http://www.discountstore.com ,
                    [store_ChainID] => ,
                    [savingsdotcom_ID] => 0 
                 ) ;

$this->db->insert('stores_online', $datainsert);

【讨论】:

  • 这不起作用,因为它会尝试插入从数据库,这就是为什么我使用 $DB1 指定主数据库的原因。
【解决方案2】:

使用

$this->db->insert('stores_online', $datainsert);

而不是

echo $DB1->_insert('stores_online', $datainsert);

【讨论】:

  • _insert 打印结果查询以进行调试
  • 如果你想检查查询,那么你应该使用 - $this->db->last_query();
  • 我无法做到这一点,因为程序在查询时崩溃了。
【解决方案3】:

我知道这个问题已经超过一年了,但我遇到了同样的问题,我通过这种方式手动创建查询来解决它:

public function add($data)
{
    $query = 'INSERT INTO myTable (';

    // (Column1, Column2, Column3,
    foreach($data as $key => $column)
        $query .= $key . ',';

    // Removes the last comma 
    // Column3, == Column3) VALUES(
    $query .= rtrim($query, ',') . ') VALUES(';

    // Value1, Value2, Value3,
    foreach($data as $key => $column)
        $query .= "'" . $column . "',";

    // Removes the last comma and closes the query
    $query .= rtrim($query, ',') . ')';

    // Result: INSERT INTO (Column1, Column2, Column3) VALUES ('VALUE1', 'VALUE2', 'VALUE3')
    return $query;
}

【讨论】:

    【解决方案4】:

    这是需要做的:

    echo $DB1->_insert('stores_online', array_keys($datainsert), $datainsert);

    附:这适用于 CI 2.X,我还没有为其他版本的 CI 测试过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 2016-09-18
      • 2018-03-09
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多