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

MySQL Istruzioni preparate con un elenco di variabili di dimensione variabile

Mi vengono in mente un paio di soluzioni.

Una soluzione potrebbe essere quella di creare una tabella temporanea. Fai un inserimento nella tabella per ogni parametro che avresti nella clausola in. Quindi esegui un semplice join contro la tua tabella temporanea.

Un altro metodo potrebbe essere fare qualcosa del genere.

$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);

Sospetto, ma non ho prove, che la prima soluzione potrebbe essere migliore per elenchi più grandi e la successiva funzionerebbe per elenchi più piccoli.

Per rendere felice @orrd ecco una versione 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);