Cập nhật truy vấn sql trong php

Trước hết, hãy đảm bảo rằng bạn đã có một biến kết nối PDO được cấu hình phù hợp, cần thiết để chạy các truy vấn SQL bằng PDO [và để thông báo cho bạn về các lỗi có thể xảy ra]

Để chạy truy vấn CẬP NHẬT với PDO, chỉ cần làm theo các bước bên dưới

  • tạo một câu lệnh CẬP NHẬT SQL chính xác
  • thay thế tất cả các giá trị thực tế bằng trình giữ chỗ
  • chuẩn bị truy vấn kết quả
  • thực hiện câu lệnh, gửi tất cả các giá trị thực tới execute[] ở dạng mảng

CẬP NHẬT truy vấn với trình giữ chỗ vị trí

Như thường lệ, trình giữ chỗ vị trí ngắn gọn hơn và dễ sử dụng hơn

$sql = "UPDATE users SET name=?, surname=?, sex=? WHERE id=?";
$stmt= $pdo->prepare[$sql];
$stmt->execute[[$name, $surname, $sex, $id]];

hoặc bạn có thể thực hiện chuỗi[] để chuẩn bị[]

$sql = "UPDATE users SET name=?, surname=?, sex=? WHERE id=?";
$pdo->prepare[$sql]->execute[[$name, $surname, $sex, $id]];

CẬP NHẬT truy vấn với trình giữ chỗ được đặt tên

Trong trường hợp bạn có một mảng được xác định trước với các giá trị hoặc nói chung thích các trình giữ chỗ được đặt tên hơn, thì mã sẽ là

$data = [
    'name' => $name,
    'surname' => $surname,
    'sex' => $sex,
    'id' => $id,
];
$sql = "UPDATE users SET name=:name, surname=:surname, sex=:sex WHERE id=:id";
$stmt= $pdo->prepare[$sql];
$stmt->execute[$data];

hoặc bạn có thể thực hiện chuỗi[] để chuẩn bị[]

$sql = "UPDATE users SET name=:name, surname=:surname, sex=:sex WHERE id=:id";
$pdo->prepare[$sql]->execute[$data];

Hãy nhớ rằng bạn không nên đưa mọi truy vấn vào một câu lệnh try..catch. Thay vào đó, hãy để lỗi có thể xảy ra với trình xử lý lỗi tùy chỉnh của PHP hoặc trình xử lý lỗi tùy chỉnh của bạn.

Không cần phải nói rằng bạn phải sử dụng các câu lệnh đã chuẩn bị cho bất kỳ truy vấn SQL nào có chứa biến PHP. Do đó, thường thì truy vấn CẬP NHẬT sẽ có một chút ý nghĩa khi không có biến, nên nó phải luôn chạy qua một câu lệnh đã chuẩn bị sẵn. Làm như vậy

  • tạo một câu lệnh CẬP NHẬT SQL chính xác
  • thay thế tất cả các biến trong truy vấn bằng dấu chấm hỏi [được gọi là trình giữ chỗ hoặc tham số]
  • chuẩn bị truy vấn kết quả
  • liên kết các biến với trình giữ chỗ
  • thực hiện truy vấn

Chạy truy vấn CẬP NHẬT với Mysqli thô

Đây là một ví dụ đơn giản. Trước hết, hãy đảm bảo rằng có kết nối phù hợp với mysqli. Sau đó, viết mã như thế này [thêm tên và biến của bảng và trường của riêng bạn]

$sql = "UPDATE users SET name=?, email=?, password=? WHERE id=?";
$stmt= $conn->prepare[$sql];
$stmt->bind_param["sssi", $name, $email, $password, $id];
$stmt->execute[];

Và để truy vấn của bạn được thực thi mà không có một lỗi cú pháp hoặc SQL injection nào

Chuyện gì đang xảy ra ở đây?

$sql = "UPDATE users SET name=?, email=?, password=? WHERE id=?";

Giống như đã nói ở trên, đầu tiên chúng ta viết một truy vấn SQL trong đó tất cả các biến được thay thế bằng các dấu chấm hỏi

QUAN TRỌNG. không nên có dấu ngoặc kép xung quanh dấu chấm hỏi, bạn đang thêm trình giữ chỗ chứ không phải chuỗi

$stmt= $conn->prepare[$sql];

Sau đó, truy vấn được chuẩn bị. Ý tưởng rất thông minh. Để tránh ngay cả khả năng tiêm SQL hoặc lỗi cú pháp do dữ liệu đầu vào gây ra, truy vấn và dữ liệu được gửi đến máy chủ cơ sở dữ liệu một cách riêng biệt. Vì vậy, nó tiếp tục ở đây. với prepare[], chúng tôi sẽ gửi truy vấn tới máy chủ cơ sở dữ liệu trước. Kết quả là một biến đặc biệt chứa câu lệnh mysqli được tạo ra. Chúng tôi sẽ sử dụng biến này từ bây giờ

$stmt->bind_param["sssi", $name, $email, $password, $id];

Sau đó, các biến phải được liên kết với câu lệnh. Cuộc gọi bao gồm hai phần - chuỗi với các loại và danh sách các biến. Với mysqli, bạn phải chỉ định loại cho từng biến bị ràng buộc. Nó được biểu thị bằng một chữ cái trong tham số đầu tiên. Số lượng chữ cái phải luôn bằng số lượng biến. Các loại có thể là

  • tôi cho số nguyên
  • d fof đôi [phao]
  • s cho chuỗi
  • b cho đốm màu

LƯU Ý rằng bạn hầu như luôn có thể sử dụng "s" một cách an toàn cho bất kỳ biến nào

Vì vậy, bây giờ bạn có thể biết rằng "sssi" có nghĩa là "sẽ có 3 biến kiểu chuỗi và biến cuối cùng kiểu số nguyên". Rồi tự nhiên bốn biến ngoan ngoãn làm theo

________số 8_______

Sau đó, truy vấn cuối cùng được thực hiện. Có nghĩa là các biến được gửi đến máy chủ cơ sở dữ liệu và truy vấn thực sự được thực thi

LƯU Ý rằng bạn không phải kiểm tra kết quả thực hiện. Nếu bạn có mã kết nối thích hợp được đề cập ở trên, trong trường hợp có lỗi, mysqli sẽ tự động báo lỗi

CẬP NHẬT truy vấn với chức năng trợ giúp

Như bạn có thể lưu ý, đoạn mã trên khá dài dòng. Nếu bạn muốn xây dựng một mã giống như hình Lego, với hàng ngũ người vận hành sáng chói, bạn có thể giữ nguyên mã đó. Nếu bạn, giống như tôi, ghét sự lặp lại vô ích và thích viết mã ngắn gọn và có ý nghĩa, thì có một hàm trợ giúp đơn giản. Với nó, mã sẽ trở nên ngắn hơn hai lần

$sql = "UPDATE users SET name=?, email=?, password=? WHERE id=?";
prepared_query[$conn, $sql, [$name, $email, $password, $id]];

Ở đây chúng tôi đang gọi hàm trợ giúp bằng cách sử dụng biến kết nối, truy vấn sql và một mảng có biến. Đơn giản, sạch sẽ và an toàn

CẬP NHẬT truy vấn từ một mảng

Hàm CẬP NHẬT là một công việc phức tạp, vì nó yêu cầu mệnh đề WHERE, mệnh đề tốt nhất yêu cầu Trình tạo truy vấn đầy đủ tính năng. Và tin tôi đi, bạn sẽ không muốn đi xuống hố thỏ đó cho một chức năng trợ giúp đơn giản

Điều có thể được đề xuất cho vấn đề này là một cách giảm nhẹ nhanh chóng, một chức năng trong đó mệnh đề WHERE giới hạn trong tra cứu khóa chính với tên trường khóa chính được mã hóa cứng, trong trường hợp này là id

function prepared_update_by_id[$conn, $table, $data, $id] {
    $table = escape_mysql_identifier[$table];
    $sql = "UPDATE $table SET ";

    foreach [array_keys[$data] as $i => $field] {
        $field = escape_mysql_identifier[$field];
        $sql .= [$i] ? ", " : "";
        $sql .= "$field = ?";
    }
    $sql .= " WHERE id = ?";
    $data[] = $id;
    prepared_query[$conn, $sql, array_values[$data]];
}

Để chức năng này hoạt động, chúng ta sẽ cần chức năng trợ giúp đã nói ở trên cũng như chức năng thoát khỏi các định danh MySQL. Có, tất cả các mã định danh phải được trích dẫn và thoát, theo tiêu chuẩn của MySQL, để tránh các vấn đề cú pháp khác nhau

Làm cách nào để cập nhật truy vấn trong SQL bằng PHP?

Các ví dụ sau cập nhật bản ghi với id=2 trong bảng "MyGuests". .
Ví dụ [Hướng đối tượng MySQLi]

Chủ Đề