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

Tôi có một mảng các số nguyên, làm cách nào để sử dụng từng số nguyên trong truy vấn mysql (trong php)?

Như với gần như tất cả các câu hỏi "Làm cách nào để sử dụng SQL từ bên trong PHP" - Bạn thực sự nên sử dụng câu lệnh đã chuẩn bị sẵn. Không khó lắm đâu:

$ids  = array(2, 4, 6, 8);

// prepare an SQL statement with a single parameter placeholder
$sql  = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id = ?";
$stmt = $mysqli->prepare($sql);

// bind a different value to the placeholder with each execution
for ($i = 0; $i < count($ids); $i++)
{
    $stmt->bind_param("i", $ids[$i]);
    $stmt->execute();
    echo "Updated record ID: $id\n";
}

// done
$stmt->close();

Ngoài ra, bạn có thể làm như thế này:

$ids    = array(2, 4, 6, 8);

// prepare an SQL statement with multiple parameter placeholders
$params = implode(",", array_fill(0, count($ids), "?"));
$sql    = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id IN ($params)";
$stmt   = $mysqli->prepare($sql);

// dynamic call of mysqli_stmt::bind_param                    hard-coded eqivalent
$types = str_repeat("i", count($ids));                        // "iiii"
$args = array_merge(array($types), $ids);                     // ["iiii", 2, 4, 6, 8]
call_user_func_array(array($stmt, 'bind_param'), ref($args)); // $stmt->bind_param("iiii", 2, 4, 6, 8)

// execute the query for all input values in one step
$stmt->execute();

// done
$stmt->close();
echo "Updated record IDs: " . implode("," $ids) ."\n";

// ----------------------------------------------------------------------------------
// helper function to turn an array of values into an array of value references
// necessary because mysqli_stmt::bind_param needs value refereces for no good reason
function ref($arr) {
    $refs = array();
    foreach ($arr as $key => $val) $refs[$key] = &$arr[$key];
    return $refs;
}

Thêm các trình giữ chỗ thông số khác cho các trường khác khi bạn cần.

Chọn cái nào?

  • Biến thể đầu tiên hoạt động lặp đi lặp lại với một số lượng bản ghi thay đổi, đánh vào cơ sở dữ liệu nhiều lần. Điều này hữu ích nhất cho các hoạt động CẬP NHẬT và CHÈN.

  • Biến thể thứ hai cũng hoạt động với một số lượng bản ghi thay đổi, nhưng nó chỉ truy cập cơ sở dữ liệu một lần. Điều này hiệu quả hơn nhiều so với cách tiếp cận lặp đi lặp lại, rõ ràng là bạn chỉ có thể làm điều tương tự với tất cả các bản ghi bị ảnh hưởng. Điều này hữu ích nhất cho các hoạt động CHỌN và XÓA hoặc khi bạn muốn CẬP NHẬT nhiều bản ghi với cùng một dữ liệu.

Tại sao báo cáo được soạn sẵn?

  • Các câu lệnh chuẩn bị an toàn hơn rất nhiều vì chúng làm cho các cuộc tấn công SQL injection là không thể. Đây là lý do chính để sử dụng các câu lệnh đã soạn sẵn, ngay cả khi việc viết chúng sẽ tốn nhiều công sức hơn. Một thói quen hợp lý cần có là:Luôn sử dụng các câu nói đã chuẩn bị sẵn, ngay cả khi bạn nghĩ rằng nó "không thực sự cần thiết". Sự lơ là sẽ đến cắn bạn (hoặc khách hàng của bạn).
  • Việc sử dụng lại cùng một câu lệnh đã chuẩn bị nhiều lần với các giá trị tham số khác nhau sẽ hiệu quả hơn việc gửi nhiều chuỗi SQL đầy đủ đến cơ sở dữ liệu, vì cơ sở dữ liệu chỉ cần biên dịch câu lệnh một lần và có thể sử dụng lại nó.
  • Chỉ các giá trị tham số được gửi đến cơ sở dữ liệu trên execute() , vì vậy, ít dữ liệu cần truyền qua dây hơn khi được sử dụng nhiều lần.

Trong các vòng lặp dài hơn, sự khác biệt về thời gian thực thi giữa việc sử dụng một câu lệnh đã soạn sẵn và việc gửi SQL thuần túy sẽ trở nên đáng chú ý.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để kiểm tra xem một chuỗi có phải là JSON hay không?

  2. Câu hỏi phân biệt chữ hoa chữ thường varchar duy nhất trong SQL

  3. Khắc phục cảnh báo MySQL 1287:‘BINARY expr’ không được dùng nữa và sẽ bị xóa trong bản phát hành trong tương lai

  4. 12 Phương pháp Tốt nhất về Bảo mật MySQL / MariaDB cho Linux

  5. Cài đặt và làm việc với MySQL 5 trên Windows 7