Mysql
 sql >> Database >  >> RDS >> Mysql

Formattazione di un array PHP per una clausola SQL IN

C'è un modo migliore

Dici nei commenti che stai usando CodeIgniter. A meno che tu non stia realizzando qualcosa di straordinariamente complicato, non c'è alcun motivo pratico per cui dovresti creare le tue query fatte in casa quando hai where_in integrato.

E se non funziona, allora c'è un buon vecchio escape .

OK, quindi, la maggior parte delle persone dice che devi citare gli articoli e ti stanno dando questo:

function createInClause($arr)
{
    return '\'' . implode( '\', \'', $arr ) . '\'';
}

ma questo non è davvero sufficiente se hai la possibilità di input discutibili (come '); DROP TABLE STUDENTS; -- . Per proteggerti, devi assicurarti di controllare SQL injection:

function createInClause($arr)
{
    $tmp = array();
    foreach($arr as $item)
    {
        // this line makes sure you don't risk a sql injection attack
        // $connection is your current connection
        $tmp[] = mysqli_escape_string($connection, $item);
    }
    return '\'' . implode( '\', \'', $tmp ) . '\'';
}