まあ、誰かがより良い解決策を持っているなら、それを提出するか、私の一時的な解決策の何が悪いのか教えてください。すべての「?」を置き換えます「:autoparam」を使用し、パラメータをインクリメントして「:autoparam0」、「:autoparam1」、「:autoparam2」などを作成します。
//Replace ? with a pseudo named parameter
$newStatement = null;
$parameter = 0;
while($newStatement !== $statement)
{
if($newStatement !== null)
{
$statement = $newStatement;
}
$newStatement = preg_replace('/\?/', ':autoparam'.$parameter, $statement, 1);
$parameter++;
}
$statement = $newStatement;
次に、PDOからパラメーターをバインドする要求を受け取ったら、パラメーターが数値であるかどうかを確認します。ほとんどの言語では、私が知る限り、数値インデックスは無効な識別子であるため、少なくとも私のPDOユーザースペースドライバーでは、数値パラメーター名を次のように置き換えることができると安全に想定できます。
//Replace the first @oci8param to a pseudo named parameter
if(is_numeric($parameter))
{
$parameter = ':autoparam'.$parameter;
}
今のところは機能します。問題が別のスコアで表示されるかどうかを確認するために、laravelでさらにテストを行う必要がありますが、これまでのところ、問題はないようです...