sql >> Base de Datos >  >> RDS >> Mysql

Formateo de una matriz PHP para una cláusula SQL IN

Hay una mejor manera

Mencionas en los comentarios que estás usando CodeIgniter. A menos que esté haciendo algo extraordinariamente complicado, no hay ninguna razón práctica por la que deba crear sus propias consultas caseras cuando tiene where_in integrado.

Y si eso no funciona, entonces hay un buen escape .

OK, entonces, la mayoría de las personas dicen que necesita cotizar los artículos y le están dando esto:

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

pero eso realmente no es suficiente si tiene la posibilidad de una entrada cuestionable (como '); DROP TABLE STUDENTS; -- . Para protegerse contra eso, debe asegurarse de verificar inyección 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 ) . '\'';
}