Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP PDO bindParam für Variable/Zeichenfolge, die für IN-Anweisung verwendet wird ...?

Was deceze in den Kommentaren gesagt hat, ist richtig. Hier ist eine Möglichkeit, wie ich das schon einmal gemacht habe.

Grundsätzlich erstellen Sie den IN Teil der SQL-Zeichenfolge, indem Sie die Array-Werte in einer Schleife durchlaufen und einen gebundenen Namen hinzufügen.

$allow = array( 'red', 'blue' );

$sql = sprintf(
    "Select * from colors where type in ( %s )",
    implode(
        ',',
        array_map(
            function($v) {
                static $x=0;
                return ':allow_'.$x++;
            },
            $allow
        )
    )
);

Dies führt zu Select * from colors where type in ( :allow_0,:allow_1 )

Schleifen Sie dann einfach den $allow Array und verwenden Sie bindValue, um jede Variable zu binden.

foreach( $allow as $k => $v ){
    $stmnt->bindValue( 'allow_'.$k, $v );
}

Ich habe dies hinzugefügt, bevor ich erkannte, dass Deceze mit einer Frage verknüpft ist, die ein ähnliches Beispiel gab. Ich lasse das hier, weil es zeigt, wie man es mit benannten gebundenen Variablen macht und nicht mit ?s