Bem, se alguém tiver uma solução melhor, envie-a ou talvez me diga o que pode estar errado com minha solução temporária. Eu substituo todos os "?" com ":autoparam" com um incremento de parâmetro criando ":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;
Então, quando recebo uma solicitação para vincular um parâmetro do PDO, verifico se o parâmetro é numérico. Na maioria dos idiomas, até onde eu sei, os índices numéricos são identificadores inválidos, então posso assumir com segurança, pelo menos para o meu driver PDO Userspace, que posso substituir o nome do parâmetro numérico por:
//Replace the first @oci8param to a pseudo named parameter
if(is_numeric($parameter))
{
$parameter = ':autoparam'.$parameter;
}
Funciona por enquanto, preciso fazer mais testes com laravel para ver se o problema aparece em uma pontuação diferente, mas até agora, parece tudo bem...