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

ADODB 5.22.6中GetUpdateSQL绑定变量生成无效SQL问题

ADODB 5.22.6 GetUpdateSQL 绑定变量查询后WHERE子句保留占位符问题

问题本质

这不是功能弃用,是ADODB 5.22.x版本对预处理语句结果集的元数据处理逻辑变更导致的。当使用带?占位符的execute查询时,新版ADODB没有将绑定的实际值同步到结果集的主键相关属性中,导致GetUpdateSQL生成WHERE子句时只能沿用占位符,无法替换成实际ID值。

可用解决办法

  • 改用GetRow获取记录
    直接获取数组形式的记录传入GetUpdateSQL,它能正确识别主键值生成语句:

    $db = \DB\openDB();
    $record = $db->GetRow("SELECT * FROM `Room` WHERE `ID` = ?", array(186));
    $newrecord = array('Name' => "newname"); 
    $updateSQL = $db->GetUpdateSQL($record, $newrecord); 
    
  • 手动补全结果集的主键值
    若必须使用execute返回的结果集对象,可手动将主键值赋值到结果集的fields属性中:

    $db = \DB\openDB();
    $record = $db->execute("SELECT * FROM `Room` WHERE `ID` = ?", array(186));
    $record->fields['ID'] = 186;
    $newrecord = array('Name' => "newname"); 
    $updateSQL = $db->GetUpdateSQL($record, $newrecord); 
    

后续建议

这属于ADODB的兼容性bug,你可以向ADODB官方仓库提交issue,附上PHP版本、数据库类型及复现代码,官方大概率会在后续版本修复该问题。

内容的提问来源于stack exchange,提问作者SHuisman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:55:57