Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Vorbereitete Anweisungen mit einer Variablenliste variabler Größe

Mir fallen ein paar Lösungen ein.

Eine Lösung könnte darin bestehen, eine temporäre Tabelle zu erstellen. Führen Sie für jeden Parameter, den Sie in der in-Klausel haben würden, eine Einfügung in die Tabelle durch. Führen Sie dann einen einfachen Join mit Ihrer temporären Tabelle durch.

Eine andere Methode könnte so etwas sein.

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

Ich vermute, habe aber keinen Beweis dafür, dass die erste Lösung für größere Listen besser sein könnte und die spätere für kleinere Listen funktionieren würde.

Um @orrd glücklich zu machen, hier eine knappe Version.

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