Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PHP - Menggunakan PDO dengan array klausa IN

PDO tidak baik dengan hal-hal seperti itu. Anda perlu membuat string dengan placeholder secara dinamis dan memasukkannya ke dalam kueri, sambil mengikat nilai array dengan cara biasa. Dengan placeholder posisional akan menjadi seperti ini:

$in  = str_repeat('?,', count($in_array) - 1) . '?';
$sql = "SELECT * FROM my_table WHERE my_value IN ($in)";
$stm = $db->prepare($sql);
$stm->execute($in_array);
$data = $stm->fetchAll();

Jika ada placeholder lain dalam kueri, Anda dapat menggunakan pendekatan berikut (kode diambil dari tutorial PDO saya ):

Anda dapat menggunakan array_merge() berfungsi untuk menggabungkan semua variabel ke dalam satu larik, menambahkan variabel lain Anda dalam bentuk larik, sesuai urutan kemunculannya dalam kueri Anda:

$arr = [1,2,3];
$in  = str_repeat('?,', count($arr) - 1) . '?';
$sql = "SELECT * FROM table WHERE foo=? AND column IN ($in) AND bar=? AND baz=?";
$stm = $db->prepare($sql);
$params = array_merge([$foo], $arr, [$bar, $baz]);
$stm->execute($params);
$data = $stm->fetchAll();

Jika Anda menggunakan placeholder bernama, kodenya akan sedikit lebih rumit, karena Anda harus membuat urutan placeholder bernama, mis. :id0,:id1,:id2 . Jadi kodenya adalah:

// other parameters that are going into query
$params = ["foo" => "foo", "bar" => "bar"];

$ids = [1,2,3];
$in = "";
$i = 0; // we are using an external counter 
        // because the actual array keys could be dangerous
foreach ($ids as $item)
{
    $key = ":id".$i++;
    $in .= ($in ? "," : "") . $key; // :id0,:id1,:id2
    $in_params[$key] = $item; // collecting values into a key-value array
}

$sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar";
$stm = $db->prepare($sql);
$stm->execute(array_merge($params,$in_params)); // just merge two arrays
$data = $stm->fetchAll();

Untungnya, untuk placeholder bernama kita tidak harus mengikuti urutan yang ketat, jadi kita bisa menggabungkan array kita dalam urutan apapun.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi MySQL ASIN() – Mengembalikan Arc Sinus dari Angka

  2. Alternatif Meja Kerja MySQL Teratas

  3. MySQL COALESCE () Dijelaskan

  4. memperbarui kolom dengan nomor urut mysql

  5. Ekspor database MySQL/MariaDB