Eh bien, si quelqu'un a une meilleure solution, allez-y, soumettez-la ou dites-moi peut-être ce qui ne va pas avec ma solution temporaire. Je remplace tous les "?" avec ":autoparam" avec un incrément de paramètre créant ":autoparam0", ":autoparam1", ":autoparam2", etc.
//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;
Ensuite, lorsque je reçois une demande de liaison d'un paramètre de PDO, je vérifie si le paramètre est numérique. Dans la plupart des langues, pour autant que je sache, les index numériques sont des identifiants invalides, donc je peux supposer en toute sécurité, au moins pour mon pilote PDO Userspace, que je peux remplacer le nom du paramètre numérique par :
//Replace the first @oci8param to a pseudo named parameter
if(is_numeric($parameter))
{
$parameter = ':autoparam'.$parameter;
}
Cela fonctionne pour l'instant, j'ai besoin de faire plus de tests avec laravel pour voir si le problème apparaît dans une partition différente, mais jusqu'à présent, ça semble aller...