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は実際のプレースホルダーとして)を取得します。 2。
これは ADOdb ライブラリの既知の制限ですか? クエリを実行する前に、すべてのフィールドを確認し、プレースホルダーとして使用されていない疑問符を別のものに置き換える必要がありますか?それとも何か不足していますか?