Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Подготвени оператори със списък с променливи с променлив размер

Сещам се за няколко решения.

Едно решение може да бъде създаването на временна таблица. Направете вмъкване в таблицата за всеки параметър, който бихте имали в клаузата in. След това направете просто присъединяване към вашата временна маса.

Друг метод може да е да направите нещо подобно.

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

Подозирам, но нямам доказателство, че първото решение може да е по-добро за по-големи списъци, а по-късното ще работи за по-малки списъци.

За да направим @orrd щастлив, ето кратка версия.

$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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TIMESTAMP() Примери – MySQL

  2. Как да изтрия от select в MySQL?

  3. Как да намерите несъществуващи данни от друга таблица чрез JOIN?

  4. Конфигурационната система не се инициализира

  5. Използвам ли JDBC пул за връзки?