Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Instruções preparadas do MySQL com uma lista de variáveis ​​de tamanho variável


Posso pensar em algumas soluções.

Uma solução pode ser criar uma tabela temporária. Faça uma inserção na tabela para cada parâmetro que você teria na cláusula in. Em seguida, faça uma junção simples em sua tabela temporária.

Outro método pode ser fazer algo assim.
$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);

Suspeito, mas não tenho provas, de que a primeira solução pode ser melhor para listas maiores e a última funcionaria para listas menores.

Para deixar @orrd feliz aqui está uma versão 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);