No cóż, jeśli ktoś ma lepsze rozwiązanie, śmiało prześlij je, a może powiedz mi, co może być nie tak z moim tymczasowym rozwiązaniem. Zamieniam wszystkie „?” z ":autoparam" z przyrostem parametru tworzącym ":autoparam0", ":autoparam1", ":autoparam2" itp.
//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;
Następnie, gdy otrzymam żądanie powiązania parametru z PDO, sprawdzam, czy parametr jest liczbowy. W większości języków, o ile wiem, indeksy numeryczne są nieprawidłowymi identyfikatorami, więc mogę spokojnie założyć, przynajmniej dla mojego sterownika PDO Userspace, że mogę zastąpić nazwę parametru numerycznego:
//Replace the first @oci8param to a pseudo named parameter
if(is_numeric($parameter))
{
$parameter = ':autoparam'.$parameter;
}
Na razie działa, muszę wykonać więcej testów z laravelem, aby sprawdzić, czy problem pojawia się w innym wyniku, ale jak dotąd wydaje się to w porządku...