首页 > 解决方案 > 代码点火器中的更新不更新记录

问题描述

$data = array('lngCount' => 'lngCount + 1');
$this->default->where('strYear', date("Y"));
$query = $this->default->update('tblVisitorCounter', $data);
echo $this->default->last_query();
print_r($query);die();

我在代码点火器中有上述内容。它不会更新数据库中的记录。我正在使用 mssql。表明

更新 "tblVisitorCounter" SET "lngCount" = 'lngCount + 1' WHERE "strYear" = '2018'

当我直接在 Microsoft SQL Server Management Studio 中使用它时,它会正确更新。

我的 CI 更新有什么问题?

标签: sql-servercodeignitersql-update

解决方案


我在这里看到两个问题:

第一的:

$query = $this->default->update('tblVisitorCounter', $data);

我想您想使用默认的数据库配置。

并具有如下数据库配置:

$db['default'] = array(
        'dsn'   => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' => 'database_name'
        // etc.
);

然后你应该把你的数据库加载到某个地方,例如你的控制器$this->load->database();并调用数据库$this->db->

注意:您显然可以$default['your_config_option']=array()像这样做一样使用然后调用数据库。这只是一种意见,但正如 CI 手册中所写的上述示例一样,一些新用户可能会对使用$this->default->.

请参阅CI 数据库配置连接到您的数据库

 

第二:

代码的第一行

$data = array('lngCount' => 'lngCount + 1');

创建一个带有与其关联的字符串值的数组,该数组在消息中正确反映

更新 "tblVisitorCounter" SET "lngCount" = 'lngCount + 1' WHERE "strYear" = '2018'

为了增加,您需要使用$this->db->set()增加字段值并从+ 1字符串中取出第三个参数设置set()为false,这将防止数据被转义,因此字段增加。见更新数据

然后您可以轻松更新数据库,例如:

$this->load->database();
$this->db->set('lngCount', 'lngCount+1', FALSE);
$this->db->where('strYear', date("Y");
$query = $this->db->update('tblVisitorCounter');

推荐阅读