我遇到了 ADOdb 的 PHP 库 ( https://sourceforge.net/projects/adodb/ ) 和 MSSQL Server 2012的问题
我正在使用占位符做一个简单的更新语句,就像这个一样,但它没有说我没有给 Execute 函数提供足够的参数:
UPDATE report SET custom='Is this ok?' WHERE ID = ?
我检查了 adodb-mssql.inc.php 并在 Prepare 函数中简单地替换了每个 ? 使用 MSSQL 的 @P 语法,而不是检查什么是占位符,什么不是:
function Prepare($sql)
{
$sqlarr = explode('?',$sql);
if (sizeof($sqlarr) <= 1) return $sql;
$sql2 = $sqlarr[0];
for ($i = 1, $max = sizeof($sqlarr); $i < $max; $i++) {
$sql2 .= '@P'.($i-1) . $sqlarr[$i];
}
return array($sql,$this->qstr($sql2),$max,$sql2);
}
因此,在我的查询中,我得到 2 个@P 参数(引号内的@P0(不打算用作占位符),@P1 作为真正的占位符),导致已经说过的错误,因为我只给 Execute 函数 1 个参数来替换而不是二。
这是 ADOdb 库的已知限制吗?在执行查询之前,我是否必须检查每个字段并将未用作占位符的问号替换为不同的内容,或者我是否遗漏了什么?