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

MySQL Forberedte udsagn med en variabel størrelsesliste

Jeg kan komme i tanke om et par løsninger.

En løsning kan være at lave en midlertidig tabel. Lav en indsættelse i tabellen for hver parameter, du ville have i in-klausulen. Så lav en simpel join mod dit midlertidige bord.

En anden metode kan være at gøre sådan noget.

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

Jeg formoder, men har intet bevis for, at den første løsning måske er bedre for større lister, og den senere ville fungere for mindre lister.

For at gøre @orrd glad her er en kortfattet 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. SQL Server-fejl ved opdateringskommando - Der opstod en alvorlig fejl på den aktuelle kommando

  2. Rails:Postgres tilladelse nægtet til at oprette database på rake db:create:all

  3. Hvordan påvirker søgestien identifikatoropløsning og det aktuelle skema

  4. Eksempler på sammenkædning af strenge og tal fra Oracle