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

Sử dụng lệnh IN để tìm kiếm với một câu lệnh đã chuẩn bị sẵn

Câu lệnh đã chuẩn bị không có tham số vì bạn đã nội suy danh sách vào câu lệnh trước khi chuẩn bị nó.

$array=array("item1","item2","item3","item4");
//This is dynamically filled, this is just an example
$in_list = "'".implode("','",$array)."'";//that's why i use implode

$stmt = $this->db->prepare('SELECT libelle,activite,adresse,tel,lat,lng FROM etablissements where type IN ('.$in_list.')');

Tại thời điểm này, câu lệnh SQL bạn đã tạo là:

SELECT libelle,activite,adresse,tel,lat,lng 
FROM etablissements where type IN ('item1','Item2','Item3','Item4')

Vì câu lệnh không có tham số, mysqli_stmt::bind_param không thành công. Thay vì nội suy các mục vào câu lệnh (dễ bị chèn), hãy nội suy một chuỗi tham số, sau đó liên kết các giá trị (các giá trị này phải được giữ riêng biệt).

$array=array("item1","item2","item3","item4");

if (count($in_list) > 0) {
    $query = $this->db->prepare('SELECT libelle,activite,adresse,tel,lat,lng FROM etablissements WHERE type IN (' . str_repeat('?, ', count($in_list)-1) . '?)');

    $args = $in_list;
    array_unshift($args, str_repeat('s', count($in_list)));
    call_user_func_array(array($query, 'bind_param'), $args);
    $query->execute();
    $query->bind_result($libelle,$activite,$adresse,$tel,$lat,$lng);
}

Giao diện ràng buộc của PDO đơn giản hơn.

$array=array("item1","item2","item3","item4");

if (count($in_list) > 0) {
    $query = $this->db->prepare('SELECT libelle,activite,adresse,tel,lat,lng FROM etablissements WHERE type IN (' . str_repeat('?, ', count($in_list)-1) . '?)');

    foreach ($in_list as $i => $arg) {
        // query params are 1-based, so add 1 to the index
        // PDO::PARAM_STR is the default type, so no need to pass 3rd arg
        $query->bindValue($i+1, $arg);
    }
    $query->execute();
    // no need to bind the result
}

Trên thực tế, nó có thể đơn giản hơn với PDO, vì PDOStatement::execute có thể lấy một danh sách các giá trị tham số:

$array=array("item1","item2","item3","item4");

if (count($in_list) > 0) {
    $query = $this->db->prepare('SELECT libelle,activite,adresse,tel,lat,lng FROM etablissements WHERE type IN (' . str_repeat('?, ', count($in_list)-1) . '?)');

    $query->execute($in_list);
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo mối quan hệ trong MySQL Workbench

  2. MySQL CHỌN ĐÂU TRONG DANH SÁCH và KHÔNG TRONG DANH SÁCH trong cùng một SQL

  3. Hàm tổng hợp trong MySQL - danh sách (như LISTAGG trong Oracle)

  4. Cách tính phần trăm hai cột trong MySQL

  5. Hộp biểu mẫu nhập HTML không điền giá trị PHP sau dấu cách đầu tiên