Giá trị trả về Mysqli_query INSERT

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ường truy vấn INSERT sẽ không có ý nghĩa gì nếu không có biế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 SQL INSERT 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ỉ cần đảm bảo rằng bạn đã có một biến kết nối mysqli được cấu hình phù hợp, cần thiết để chạy các truy vấn SQL và để thông báo cho bạn về các lỗi có thể xảy ra

Chạy truy vấn INSERT với Mysqli thô

Chỉ cần viết một mã như trong ví dụ này

$sql = "INSERT INTO users [name, email, password] VALUES [?,?,?]";
$stmt= $conn->prepare[$sql];
$stmt->bind_param["sss", $name, $email, $password];
$stmt->execute[];

và thực hiện truy vấn của bạn mà không có một lỗi cú pháp hoặc SQL injection nào

Giải trình

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

$sql = "INSERT INTO users [name, email, password] VALUES [?,?,?]";

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 đang gửi truy vấn tới máy chủ cơ sở dữ liệu trước. Một biến đặc biệt, một câu lệnh được tạo ra như một kết quả. Chúng tôi sẽ sử dụng biến này từ bây giờ

$stmt->bind_param["sss", $name, $email, $passwor];

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 "sss" có nghĩa là "sẽ có 3 biến, tất cả đều thuộc loại chuỗi". Và rồi tự nhiên ba biến ngoan ngoãn làm theo

$stmt->execute[];

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

CHÈN truy vấn với chức năng trợ giúp

Như bạn có thể lưu ý, mã này 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 = "INSERT INTO users [name, email, password] VALUES [?,?,?]";
prepared_query[$conn, $sql, [$name, $email, $password]];

Ở đâ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

CHÈN truy vấn từ một mảng

Điều thường xảy ra là chúng ta có một mảng bao gồm các trường và giá trị của chúng đại diện cho một hàng được chèn vào cơ sở dữ liệu. Và đương nhiên, sẽ là một ý kiến ​​hay nếu có một hàm chuyển đổi một mảng như vậy thành một câu lệnh SQL INSERT đúng và thực thi nó. Vậy là xong [sử dụng chức năng trợ giúp đã đề cập ở trên nhưng bạn có thể dễ dàng viết lại thành mysqli thô nếu muốn]

Trước hết, chức năng này sẽ cần một chức năng trợ giúp của riêng nó. Chúng tôi sẽ cần một chức năng để thoát khỏi đị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

function escape_mysql_identifier[$field]{
    return "`".str_replace["`", "``", $field]."`";
}

Và bây giờ cuối cùng chúng ta cũng có thể có một hàm chấp nhận tên bảng và một mảng có dữ liệu và chạy truy vấn INSERT đã chuẩn bị đối với cơ sở dữ liệu

mysqli_query[] dùng để làm gì?

Định nghĩa và cách sử dụng . performs a query against a database.

mysqli_result trả về cái gì?

Lớp mysqli_result ¶ . the result set obtained from a query against the database.

mysqli_query trả về cái gì nếu trống?

Đối với các truy vấn thành công khác, mysqli_query[] sẽ trả về TRUE. Số 0 là kết quả của một hàng . Cảm ơn bạn đã trả lời.

Mysqli_num_rows trả về cái gì?

Hàm mysqli_num_rows[] trả về số hàng trong tập hợp kết quả .

Chủ Đề