Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Các câu lệnh được chuẩn bị sẵn trong MySQL với danh sách biến kích thước có thể thay đổi

Tôi có thể nghĩ ra một vài giải pháp.

Một giải pháp có thể là tạo một bảng tạm thời. Thực hiện chèn vào bảng cho mỗi tham số mà bạn sẽ có trong mệnh đề trong. Sau đó, thực hiện một phép nối đơn giản với bảng tạm thời của bạn.

Một phương pháp khác có thể là làm điều gì đó như thế này.

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

Tôi nghi ngờ, nhưng không có bằng chứng nào, rằng giải pháp đầu tiên có thể tốt hơn cho các danh sách lớn hơn và giải pháp sau sẽ hiệu quả với các danh sách nhỏ hơn.

Để làm cho @orrd hài ​​lòng, đây là một phiên bản ngắn hạn.

$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. 5 truy vấn hữu ích của MySql trong quá trình phát triển dự án

  2. Làm cách nào để thay đổi BỘ KÝ TỰ (và BỘ LẠNH) trong toàn bộ cơ sở dữ liệu?

  3. Tôi có thể khôi phục một bảng từ tệp mysql mysqldump đầy đủ không?

  4. Gọi thủ tục được lưu trữ với tham số Out bằng PDO

  5. Mô phỏng ORDER BY FIELD () của MySQL trong Postgresql