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

PHP:Chèn Giá trị từ Biểu mẫu vào MySQL

Đoạn mã sau chỉ khai báo một biến chuỗi có chứa truy vấn MySQL:

$sql = "INSERT INTO users (username, password, email)
    VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";

Nó không thực hiện truy vấn. Để làm được điều đó, bạn cần sử dụng một số chức năng nhưng trước tiên hãy để tôi giải thích một số chức năng khác.

KHÔNG BAO GIỜ TIN TƯỞNG ĐẦU VÀO CỦA NGƯỜI DÙNG :Bạn không bao giờ nên thêm đầu vào của người dùng (chẳng hạn như đầu vào biểu mẫu từ $_GET hoặc $_POST ) trực tiếp cho truy vấn của bạn. Ai đó có thể cẩn thận thao túng dữ liệu đầu vào theo cách như vậy có thể gây ra thiệt hại lớn cho cơ sở dữ liệu của bạn. Đó được gọi là SQL Injection. Bạn có thể đọc thêm về nó tại đây

Để bảo vệ tập lệnh của bạn khỏi cuộc tấn công như vậy, bạn phải sử dụng Báo cáo chuẩn bị. Thông tin thêm về các tuyên bố đã chuẩn bị tại đây

Bao gồm các câu lệnh đã chuẩn bị vào mã của bạn như sau:

$sql = "INSERT INTO users (username, password, email)
    VALUES (?,?,?)";

Lưu ý cách ? được sử dụng làm trình giữ chỗ cho các giá trị. Tiếp theo, bạn nên chuẩn bị câu lệnh bằng cách sử dụng mysqli_prepare :

$stmt = $mysqli->prepare($sql);

Sau đó, bắt đầu liên kết các biến đầu vào với câu lệnh đã chuẩn bị:

$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);

Và cuối cùng là thực hiện các câu lệnh đã chuẩn bị sẵn. (Đây là nơi diễn ra quá trình chèn thực tế)

$stmt->execute();

LƯU Ý Mặc dù không phải là một phần của câu hỏi, nhưng tôi thực sự khuyên bạn không bao giờ lưu trữ mật khẩu dưới dạng văn bản rõ ràng. Thay vào đó, bạn nên sử dụng password_hash để lưu trữ một hàm băm của mật khẩu



  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ố gắng thay đổi thư mục nhật ký bin:không tìm thấy mysql-bin.index (Mã lỗi:13)

  2. Điều gì sai với cú pháp MySQL CASE / WHEN của tôi?

  3. COUNT (id) so với COUNT (*) trong MySQL

  4. Mysql biến 'thành â € ™?

  5. Tại sao bảng InnoDB của tôi có giá trị kỳ lạ cho số bản ghi?