Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Können Sie benannte Parameter in Laravel Eloquent verwenden

Na ja, wenn jemand eine bessere Lösung hat, reichen Sie sie ein oder sagen Sie mir vielleicht, was mit meiner temporären Lösung falsch sein könnte. Ich ersetze alle "?" mit ":autoparam" mit einem Parameterinkrement, das ":autoparam0", ":autoparam1", ":autoparam2" usw. erzeugt

    //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;

Wenn ich dann eine Anfrage zum Binden eines Parameters von PDO erhalte, überprüfe ich, ob der Parameter numerisch ist. In den meisten Sprachen sind numerische Indizes, soweit ich weiß, ungültige Bezeichner, daher kann ich zumindest für meinen PDO-Userspace-Treiber davon ausgehen, dass ich den numerischen Parameternamen ersetzen kann durch:

    //Replace the first @oci8param to a pseudo named parameter
    if(is_numeric($parameter))
    {
        $parameter = ':autoparam'.$parameter;
    }

Im Moment funktioniert es, ich muss mehr Tests mit Laravel durchführen, um zu sehen, ob das Problem in einer anderen Partitur auftritt, aber bisher scheint es in Ordnung zu sein ...