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

Declaraciones preparadas de MySQL con una lista de variables de tamaño variable

Se me ocurren un par de soluciones.

Una solución podría ser crear una tabla temporal. Haga una inserción en la tabla para cada parámetro que tendría en la cláusula in. Luego haz una combinación simple contra tu tabla temporal.

Otro método podría ser hacer algo como esto.

$dbh=new PDO($dbConnect, $dbUser, $dbPass);
$parms=array(12, 45, 65, 33);
$parmcount=count($parms);   // = 4
$inclause=implode(',',array_fill(0,$parmcount,'?')); // = ?,?,?,?
$sql='SELECT age, name FROM people WHERE id IN (%s)';
$preparesql=sprintf($sql,$inclause);  // = example statement used in the question
$st=$dbh->prepare($preparesql);
$st->execute($parms);

Sospecho, pero no tengo pruebas, que la primera solución podría ser mejor para listas más grandes y la última funcionaría para listas más pequeñas.

Para hacer feliz a @orrd aquí hay una versión concisa.

$dbh=new PDO($dbConnect, $dbUser, $dbPass);
$parms=array(12, 45, 65, 33);
$st=$dbh->prepare(sprintf('SELECT age, name FROM people WHERE id IN (%s)',
                          implode(',',array_fill(0,count($parms),'?'))));
$st->execute($parms);