用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1834|回复: 5
收起左侧

[数据库] 用查询构造器如何在语句中调用mysql函数?

[复制链接]
发表于 2017-6-26 12:34:21 | 显示全部楼层 |阅读模式
本帖最后由 hyperlau 于 2017-6-26 12:35 编辑

例如我要插入时间到一个字段,需要调用mysql的now()函数,如何在查询构造器里写?难道只能先用query得到结果后再用查询构造器吗?那样的话就是调用两次数据库了,如何在一次数据库查询中解决?
谢谢!
发表于 2017-6-26 15:39:50 | 显示全部楼层
query() 这个可以写任何 SQL 语句。
 楼主| 发表于 2017-6-27 10:27:36 | 显示全部楼层
本帖最后由 hyperlau 于 2017-6-27 10:33 编辑
Hex 发表于 2017-6-26 15:39
query() 这个可以写任何 SQL 语句。

例如我要插入一行数据,代码差不多像这样:
$data=array(
      'name'=>'jack',
      'time'=>'now()'
);
$this->db->insert('table',$data);
那now() 会被转义。
我要实现这个需求的话就只能先执行:
$now=$this->db->query('select now()')->row_array()['now()'];
然后把$now传给$data['time']再执行insert(),
但这就相当于有两次mysql调用了,如何直接在$this->db->insert()里调用now()?
发表于 2017-6-27 10:48:48 | 显示全部楼层
hyperlau 发表于 2017-6-27 10:27
例如我要插入一行数据,代码差不多像这样:
$data=array(
      'name'=>'jack',

$this->db->insert() 这是 querybuilder,这个会转义,想不转义就直接使用 $this->db->query() 这个可以写正常的 SQL 语句,也就是你在 phpmyadmin 里测试 ok 的都可以直接用。
发表于 2017-6-27 11:01:17 | 显示全部楼层
本帖最后由 Michael锐生 于 2017-6-27 11:03 编辑

需要转译的字段单独写set就可以,其他按原来的写
PHP复制代码
$this->db->set('time', 'now()', FALSE)->insert('table', $otherData);
复制代码
 楼主| 发表于 2017-6-27 11:15:38 | 显示全部楼层
Michael锐生 发表于 2017-6-27 11:01
需要转译的字段单独写set就可以,其他按原来的写

哦哦,明白了!非常感谢!!

本版积分规则