sql >> Databáze >  >> RDS >> Mysql

Formátování pole PHP pro klauzuli SQL IN

Existuje lepší způsob

V komentářích uvádíte, že používáte CodeIgniter. Pokud nevytváříte něco mimořádně složitého, neexistuje žádný praktický důvod, proč byste měli vytvářet své vlastní domácí dotazy, když máte where_in vestavěný.

A pokud to nefunguje, pak existuje dobrý staromódní escape .

Dobře, takže většina lidí říká, že musíte položky citovat, a dávají vám toto:

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

ale to opravdu nestačí, pokud máte možnost pochybného vstupu (jako je '); DROP TABLE STUDENTS; -- . Abyste se proti tomu chránili, musíte zkontrolovat vložení SQL:

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 ) . '\'';
}


  1. Důležitost dobrého návrhu databáze (a 7 kroků k jeho dosažení)

  2. SQL Query pomalý v aplikaci .NET, ale okamžitý v SQL Server Management Studio

  3. Co je to MYSQL Partitioning?

  4. Zprávy MySQL Workbench nejsou na této pozici platné pro tuto chybu verze serveru