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
相关产品推荐
相关产品推荐

