sql >> Databáze >  >> RDS >> Mysql

MySQL Připravené příkazy se seznamem proměnných s proměnnou velikostí

Napadá mě několik řešení.

Jedním z řešení může být vytvoření dočasné tabulky. Proveďte vložení do tabulky pro každý parametr, který byste měli v klauzuli in. Pak se jednoduše připojte k vašemu dočasnému stolu.

Další metodou může být udělat něco takového.

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

Mám podezření, ale nemám žádný důkaz, že první řešení by mohlo být lepší pro větší seznamy a pozdější by fungovalo pro menší seznamy.

Aby byl @orrd šťastný, je zde stručná verze.

$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. Regulární výraz (RegEx) pro IPv6 Oddělený od IPv4

  2. Příklad Spring Boot CRUD s MySQL

  3. Jak nainstalovat SQLOPS na Mac

  4. SQLite CHECK omezení