Oh well, jika seseorang memiliki solusi yang lebih baik, silakan kirimkan atau mungkin beri tahu saya apa yang salah dengan solusi sementara saya. saya ganti semua "?" dengan ":autoparam" dengan kenaikan parameter membuat ":autoparam0", ":autoparam1", ":autoparam2", dll.
//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;
Kemudian, ketika saya menerima permintaan untuk mengikat parameter dari PDO, saya memeriksa apakah parameternya numerik. Dalam kebanyakan bahasa, sejauh yang saya tahu, indeks numerik adalah pengidentifikasi yang tidak valid, jadi saya dapat dengan aman berasumsi, setidaknya untuk driver PDO Userspace saya bahwa saya dapat mengganti nama parameter numerik dengan:
//Replace the first @oci8param to a pseudo named parameter
if(is_numeric($parameter))
{
$parameter = ':autoparam'.$parameter;
}
Ini berfungsi untuk saat ini, saya perlu melakukan lebih banyak tes dengan laravel untuk melihat apakah masalah muncul dalam skor yang berbeda, tetapi sejauh ini, tampaknya baik-baik saja...