You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CodeIgniter查询构造器中向MSSQL插入含newid()的uniqueidentifier数据

错误原因

CodeIgniter Query Builder 默认会对所有插入的值做转义处理,你直接把newid()、getdate()作为字符串传入数据数组时,框架会自动给值加上单引号,最终生成的SQL语句为id = 'newid()',相当于尝试把普通字符串转换为uniqueidentifier类型,自然会触发转换失败的报错。
另外PHP原生的uniqid()生成的是13位无分隔符的唯一字符串,不符合SQL Server uniqueidentifier要求的36位GUID格式,也会出现格式不匹配的错误。

正确实现方式

对需要调用SQL原生函数的字段,单独调用set()方法,并将第三个参数设为false,关闭该字段的自动转义即可,其他普通字段仍保持正常传值即可保留转义逻辑,避免SQL注入风险。正确代码如下:

$db = \Config\Database::connect();
$builder = $db->table('DOM5_PP_LOGI');

// 单独处理需要调用SQL原生函数的字段,第三个参数关闭转义
$builder->set('id', 'NEWID()', false);
$builder->set('data_datetime', 'GETDATE()', false);

// 普通业务字段正常传入数组,框架会自动做转义处理
$data = [
    'id_zgloszenia' => $idpp,
    'response' => $response_pp,
    'header_response' => $head_res,
];

$builder->insert($data);

内容的提问来源于stack exchange,提问作者Kordian Zadrożny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:12:03