Oh beh, se qualcuno ha una soluzione migliore, vai avanti a inviarla o forse dimmi cosa potrebbe esserci di sbagliato nella mia soluzione temporanea. Sostituisco tutti i "?" con ":autoparam" con un incremento di parametro creando ":autoparam0", ":autoparam1", ":autoparam2", ecc.
//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;
Quindi, quando ricevo una richiesta per associare un parametro da PDO, controllo se il parametro è numerico. Nella maggior parte delle lingue, per quanto ne so, gli indici numerici sono identificatori non validi, quindi posso tranquillamente presumere, almeno per il mio driver PDO Userspace, che posso sostituire il nome del parametro numerico con:
//Replace the first @oci8param to a pseudo named parameter
if(is_numeric($parameter))
{
$parameter = ':autoparam'.$parameter;
}
Per ora funziona, devo fare più test con laravel per vedere se il problema appare in un punteggio diverso, ma finora sembra tutto a posto...