sql >> Databasteknik >  >> RDS >> Mysql

MySQL Förberedda uttalanden med en variabel lista med variabel storlek

Jag kan komma på ett par lösningar.

En lösning kan vara att skapa en tillfällig tabell. Gör en infogning i tabellen för varje parameter som du skulle ha i in-satsen. Gör sedan en enkel join mot ditt tillfälliga bord.

En annan metod kan vara att göra något liknande.

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

Jag misstänker, men har inga bevis, att den första lösningen kan vara bättre för större listor, och den senare skulle fungera för mindre listor.

För att göra @orrd glad här är en kortfattad 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);


  1. Kontrollera om filen finns eller inte i sql-servern?

  2. Anslutning till SQL Server fungerar ibland

  3. Guide till designdatabas för sociala nätverkssystem i MySQL

  4. Naturlig sortering i MySQL