Добре, ако някой има по-добро решение, нека го изпрати или може би да ми каже какво не е наред с моето временно решение. Заменям всички "?" с ":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, за да видя дали проблемът се появява в различен резултат, но засега изглежда добре...