Chèn truy vấn bằng hàm trong PHP

Trong hướng dẫn này, bạn sẽ học cách CHÈN dữ liệu vào cơ sở dữ liệu MySQL của mình từ các tập lệnh PHP. Có hai phương pháp mà bạn có thể sử dụng, MySQLi và PDO. Trước khi bạn bắt đầu hướng dẫn chèn PHP MySQL này, bạn sẽ cần quyền truy cập vào bảng điều khiển lưu trữ của mình

Chèn truy vấn bằng hàm trong PHP

Nếu bạn không chắc chắn về cách thiết lập kết nối MySQL của mình, bạn có thể xem hướng dẫn PHPMySQL này bao gồm các bước quan trọng nhất khi làm việc với PHP và cơ sở dữ liệu

Tạo bảng (Tùy chọn)

Chèn truy vấn bằng hàm trong PHP

Đầu tiên, chúng ta phải tạo một bảng cho dữ liệu của bạn. Nếu bạn đã tạo rồi, hãy cuộn xuống phần tiếp theo. Tạo bảng là một quy trình đơn giản mà bạn có thể thực hiện với phpMyAdmin, nằm trong bảng điều khiển lưu trữ của bạn

Sau khi đăng nhập vào trang phpMyAdmin của bạn, bạn sẽ thấy một cái gì đó tương tự như thế này

Chèn truy vấn bằng hàm trong PHP

Chèn truy vấn bằng hàm trong PHP

Chúng tôi sẽ tạo một bảng có tên Sinh viên cho cơ sở dữ liệu của chúng tôi u104357129_name. Bạn có thể tạo bảng mới bằng cách nhấp vào nút Tạo bảng ở gần cuối trang. Sau đó, bạn sẽ được chuyển đến một trang mới nơi bạn có thể nhập tất cả thông tin cần thiết cho bảng của mình

Vì đây là một thiết lập đơn giản, để biết thêm thông tin về cấu trúc của bảng/cơ sở dữ liệu và loại cài đặt nào bạn có thể sử dụng với các cột, hãy tham khảo tài liệu chính thức của phpMyAdmin

Hiện tại, đây là một số giải thích về các cột mà chúng tôi đã sử dụng

  • Tên – Đây là tên cột của bạn. Nó sẽ được hiển thị ở đầu bảng của bạn
  • Type – Đây là kiểu dữ liệu của bạn. Bạn có thể đặt int, varchar, string, v.v. Ví dụ: chúng tôi đã chọn varchar vì chúng tôi cần nhập tên loại chuỗi (sử dụng chữ cái, không phải số)
  • Độ dài/Giá trị – Điều này được sử dụng để chỉ định độ dài tối đa mà mục nhập của bạn trong cột này có thể có
  • Chỉ mục – Chúng tôi đã sử dụng chỉ mục “Chính” cho trường “ID” của mình. Khi tạo bảng, nên có một cột ID. Nó được sử dụng để liệt kê các mục trong bảng và được yêu cầu khi định cấu hình các mối quan hệ của bảng. Chúng tôi cũng đã đánh dấu “A_I”, có nghĩa là Tăng tự động. Điều này sẽ tự động liệt kê các mục (1,2,3,4…)

Nhấp vào Lưu và bảng của bạn sẽ được tạo

Mã PHP để CHÈN dữ liệu vào cơ sở dữ liệu MySQL

Có hai phương pháp bạn có thể sử dụng để CHÈN dữ liệu vào cơ sở dữ liệu MySQL của mình. Phương thức PHP MySQLi và Đối tượng dữ liệu PHP hoặc phương thức PDO

Phương pháp MySQLi

Trước tiên, bạn sẽ cần thiết lập kết nối với cơ sở dữ liệu. Sau khi hoàn thành, chúng ta có thể tiến hành INSERT truy vấn MySQL. Dưới đây là một ví dụ mã PHP đầy đủ với các phương thức chèn và kết nối cơ bản

" . mysqli_error($conn);
}
mysqli_close($conn);

?>

Phần đầu tiên của mã (dòng 3 – 18) dành cho kết nối thực sự với cơ sở dữ liệu. Chúng tôi sẽ không xem lại phần này, tuy nhiên, nếu bạn muốn biết ý nghĩa của từng dòng mã, hãy xem hướng dẫn cách kết nối với cơ sở dữ liệu của chúng tôi

Vì vậy, hãy bắt đầu với dòng số 19

$sql = "INSERT INTO Students (name, lastname, email) VALUES ('Test', 'Testing', '[email protected]')";

Đây là dòng mã PHP quan trọng nhất vì nó chèn dữ liệu vào cơ sở dữ liệu MySQL. INSERT INTO là câu lệnh thêm dữ liệu vào bảng cơ sở dữ liệu đã chỉ định. Trong ví dụ này, chúng tôi đang thêm dữ liệu vào bảng Học sinh

Đi xa hơn, giữa dấu ngoặc đơn, chúng tôi có các tên cột của bảng được chỉ định cho nơi chúng tôi muốn thêm các giá trị. (tên, họ, email). Dữ liệu sẽ được thêm vào theo thứ tự đã chỉ định. Nếu chúng tôi đã viết (email, họ, tên), các giá trị sẽ được thêm vào theo thứ tự sai

Phần tiếp theo là câu lệnh VALUES. Ở đây chúng tôi chỉ định các giá trị của mình để chèn vào các cột đã chỉ định trước đó. Bằng cách đó, mỗi cột đại diện cho một giá trị cụ thể. Ví dụ, trong trường hợp của chúng tôi, nó sẽ như thế này. tên = Kiểm tra, họ = Kiểm tra, email = Kiểm tra @ kiểm tra. com

Một điều đáng nói nữa là chúng ta vừa chạy một truy vấn SQL bằng mã PHP. Các truy vấn SQL phải được đặt giữa các dấu ngoặc kép. Trong ví dụ của chúng tôi, mọi thứ nằm giữa dấu ngoặc kép và được viết sau $sql = là một truy vấn SQL

Phần tiếp theo của mã (20 – 22 dòng) kiểm tra xem truy vấn của chúng tôi có thành công không

if (mysqli_query($conn, $sql)) {
     echo "New record created successfully";
}

Nó chỉ hiển thị một thông báo thành công nếu truy vấn mà chúng tôi đã chạy thành công

Và phần cuối cùng (22 – 24 dòng) hiển thị một thông báo khác trong trường hợp truy vấn của bạn không thành công

else {
     echo "Error: " . $sql . "
" . mysqli_error($conn); }

Nó sẽ cung cấp cho chúng tôi một thông báo lỗi SQL trong trường hợp có gì đó không ổn

Phương thức đối tượng dữ liệu PHP (PDO)

Như với ví dụ trước, trước tiên chúng ta cần kết nối với cơ sở dữ liệu, điều này được thực hiện bằng cách tạo một đối tượng PDO mới – hướng dẫn này sẽ chỉ cho bạn cách thực hiện nếu bạn không chắc chắn. Vì kết nối đến cơ sở dữ liệu MySQL là một đối tượng PDO, bạn phải sử dụng các phương thức PDO khác nhau (bất kỳ chức năng nào là một phần của bất kỳ đối tượng nào) để chuẩn bị và chạy các truy vấn. Các phương thức của các đối tượng được gọi như thế này

$the_Object->the_Method();

PDO cho phép bạn chuẩn bị mã SQL trước khi nó được thực thi. Truy vấn SQL được đánh giá và sửa chữa trước khi chạy. Một cuộc tấn công SQL injection đơn giản hóa có thể được thực hiện chỉ bằng cách nhập mã SQL vào một trường trên biểu mẫu. Ví dụ

// User writes this in the username field of a login form
john"; DROP DATABASE user_table;

// The final query becomes this
"SELECT * FROM user_table WHERE username = john"; DROP DATABASE user_table;

Vì có mã SQL đúng về mặt cú pháp, dấu chấm phẩy sẽ tạo DROP DATABASE user_table một truy vấn SQL mới và bảng người dùng của bạn sẽ bị xóa. Báo cáo đã chuẩn bị không cho phép “ và ;

Quan trọng. Bạn phải luôn sử dụng các câu lệnh đã chuẩn bị khi gửi hoặc nhận dữ liệu từ cơ sở dữ liệu bằng PDO

Để sử dụng các câu lệnh đã chuẩn bị, bạn phải viết một biến mới gọi phương thức chuẩn bị () của đối tượng cơ sở dữ liệu

Vào đúng mã

 PDO::ERRMODE_EXCEPTION];

// Create a new connection to the MySQL database using PDO, $my_Db_Connection is an object
try { 
  $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options);
  echo "Connected successfully";
} catch (PDOException $error) {
  echo 'Connection error: ' . $error->getMessage();
}

// Set the variables for the person we want to add to the database
$first_Name = "Test";
$last_Name = "Testing";
$email = "[email protected]";

// Here we create a variable that calls the prepare() method of the database object
// The SQL query you want to run is entered as the parameter, and placeholders are written like this :placeholder_name
$my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO Students (name, lastname, email) VALUES (:first_name, :last_name, :email)");

// Now we tell the script which variable each placeholder actually refers to using the bindParam() method
// First parameter is the placeholder in the statement above - the second parameter is a variable that it should refer to
$my_Insert_Statement->bindParam(':first_name', $first_Name);
$my_Insert_Statement->bindParam(':last_name', $last_Name);
$my_Insert_Statement->bindParam(':email', $email);

// Execute the query using the data we just defined
// The execute() method returns TRUE if it is successful and FALSE if it is not, allowing you to write your own messages here
if ($my_Insert_Statement->execute()) {
  echo "New record created successfully";
} else {
  echo "Unable to create record";
}

// At this point you can change the data of the variables and execute again to add more data to the database
$first_Name = "John";
$last_Name = "Smith";
$email = "[email protected]";
$my_Insert_Statement->execute();

// Execute again now that the variables have changed
if ($my_Insert_Statement->execute()) {
  echo "New record created successfully";
} else {
  echo "Unable to create record";
}

Ở các dòng 28, 29 và 30, chúng ta sử dụng phương thức bindParam() của đối tượng cơ sở dữ liệu. Ngoài ra còn có phương thức bindValue() rất khác

  • bindParam() – Phương thức này đánh giá dữ liệu khi đạt đến phương thức exec(). Lần đầu tiên tập lệnh tiếp cận phương thức exec(), tập lệnh sẽ thấy rằng $first_Name tương ứng với “Kiểm tra”, liên kết giá trị đó và chạy truy vấn. Khi tập lệnh đến phương thức exec() thứ hai, tập lệnh sẽ thấy rằng $first_Name hiện tương ứng với “John”, liên kết giá trị đó và chạy lại truy vấn với các giá trị mới. Điều quan trọng cần nhớ là chúng tôi đã xác định truy vấn một lần và sử dụng lại truy vấn đó với các dữ liệu khác nhau tại các điểm khác nhau trong tập lệnh
  • bindValue() – Phương thức này đánh giá dữ liệu ngay khi đạt được bindValue(). Vì giá trị của $first_Name được đặt thành “Thử nghiệm” khi đạt đến bindValue(), giá trị này sẽ được sử dụng mỗi khi một phương thức exec() được gọi cho $my_Insert_Statement

Lưu ý rằng chúng tôi sử dụng lại biến $first_Name và đặt cho nó một giá trị mới lần thứ hai. Nếu bạn kiểm tra cơ sở dữ liệu của mình sau khi chạy tập lệnh này, thì bạn có cả hai tên đã xác định, mặc dù biến $first_Name bằng “John” ở cuối tập lệnh. Hãy nhớ rằng PHP đánh giá toàn bộ tập lệnh trước khi thực sự chạy nó

Nếu bạn cập nhật tập lệnh để thay thế bindParam bằng bindValue, bạn sẽ chèn vào MySQL “Test Testing” hai lần trong cơ sở dữ liệu và John Smith sẽ bị bỏ qua

Xác nhận thành công và giải quyết các vấn đề chung

Nếu truy vấn mà chúng tôi đã chạy và chèn vào cơ sở dữ liệu MySQL thành công, chúng tôi sẽ thấy thông báo sau như

Connect Successfully
New record created successfully

Khắc phục các lỗi thường gặp

Tuy nhiên, đôi khi bản ghi mới sẽ có lỗi với phần chèn SQL. Nhưng đừng lo lắng, có một số cách bạn có thể thực hiện để sửa các lỗi MySQL này

MySQLi

Nếu thông báo lỗi MySQLi được hiển thị, chúng ta có thể thực hiện các phương pháp sau để khắc phục. Ví dụ: hãy tạo một lỗi cú pháp trong mã của chúng tôi, nếu chúng tôi làm như vậy, chúng tôi sẽ thấy một cái gì đó tương tự như thế này

________số 8

Như bạn có thể thấy, phần đầu tiên của mã là tốt, kết nối đã được thiết lập thành công, nhưng truy vấn SQL của chúng tôi đã chạy vào tường

"Error: INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', '[email protected]') You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', '[email protected]')' at line 1"

Thật không may, có một lỗi cú pháp khiến tập lệnh của chúng tôi không thành công. Lỗi là ở đây

$sql = "INSERT INTO Students (name, lastname, email) VALUES ('Test', 'Testing', '[email protected]')";
0

Chúng tôi đã sử dụng dấu ngoặc nhọn thay vì dấu ngoặc đơn. Vì điều này không chính xác nên nó đã khiến tập lệnh của chúng tôi đưa ra lỗi cú pháp

PDO

Trên dòng 7 của kết nối PDO, chế độ lỗi được đặt để hiển thị tất cả các ngoại lệ. Nếu điều này không có trong tập lệnh và truy vấn không thành công, bạn sẽ không nhận được bất kỳ thông báo lỗi nào. Với các ngoại lệ được bật, sự cố cụ thể được hiển thị

Điều này thường chỉ nên được sử dụng khi phát triển tập lệnh vì nó có thể làm lộ tên bảng và cơ sở dữ liệu mà bạn có thể muốn ẩn khỏi bất kỳ ai có thể đang cố gắng truy cập dữ liệu của bạn một cách ác ý. Trong trường hợp ở trên khi dấu ngoặc nhọn được sử dụng thay vì dấu ngoặc đơn, lỗi trông giống như thế này

$sql = "INSERT INTO Students (name, lastname, email) VALUES ('Test', 'Testing', '[email protected]')";
1

Các sự cố có thể khác mà bạn có thể gặp phải

  • Các cột được chỉ định không chính xác (cột không tồn tại hoặc lỗi chính tả)
  • Một loại giá trị được gán cho một loại cột khác. Ví dụ: nếu chúng tôi cố gắng gán một số 47 vào cột Tên, chúng tôi sẽ gặp lỗi vì nó được coi là một giá trị chuỗi. Nhưng nếu chúng tôi đã chỉ định một số giữa các dấu ngoặc kép, ví dụ: “47”, điều đó sẽ hiệu quả vì số của chúng tôi sẽ được chỉ định dưới dạng một chuỗi cho cột
  • Cố gắng nhập dữ liệu vào một bảng không tồn tại hoặc mắc lỗi chính tả của bảng

Tất cả những lỗi đó có thể được khắc phục dễ dàng bằng cách làm theo hướng dẫn về thông báo lỗi hoặc kiểm tra nhật ký lỗi

Chèn truy vấn bằng hàm trong PHP

Sau khi nhập dữ liệu thành công, chúng ta sẽ thấy nó được thêm vào cơ sở dữ liệu của mình. Đây là một ví dụ về bảng mà chúng tôi đã thêm dữ liệu của mình khi được xem từ phpMyAdmin

Phần kết luận

Trong hướng dẫn này, bạn đã học cách sử dụng PHP để CHÈN dữ liệu vào cơ sở dữ liệu MySQL của mình bằng MySQLi và PDO. Bạn cũng đã học cách khắc phục các lỗi kết nối phổ biến. Biết cách sử dụng PHP để thêm dữ liệu vào cơ sở dữ liệu MySQL rất hữu ích cho dù bạn đang học cách viết mã hay xây dựng trang web của mình

Tác giả

Domantas G

Domantas dẫn dắt các nhóm nội dung và SEO về phía trước với những ý tưởng mới và phương pháp tiếp cận vượt trội. Được trang bị kiến ​​thức sâu rộng về SEO và tiếp thị, anh đặt mục tiêu quảng bá Hostinger đến mọi nơi trên thế giới. Trong thời gian rảnh rỗi, Domantas thích trau dồi kỹ năng phát triển web của mình và đi du lịch đến những nơi xa lạ

Làm cách nào để chèn dữ liệu bằng hàm trong PHP?

Để chèn hàng mới vào bảng cơ sở dữ liệu, chúng tôi sử dụng CHÈN câu lệnh INTO trong PHP . Chúng tôi thực hiện truy vấn chèn trong PHP bằng cách chuyển mysqli_query(). Nếu bạn muốn thực hiện nhiều truy vấn trong một lần gọi, chúng tôi sử dụng mysqli_multi_query vì mysqli_query sẽ không thực hiện nhiều truy vấn để ngăn việc tiêm SQL.

Chúng ta có thể chèn dữ liệu bằng hàm trong SQL không?

Trong SQL Server, có thể chèn dữ liệu thông qua hàm có giá trị bảng (TVF) . Bằng cách này, ý tôi là chèn các hàng vào các bảng bên dưới mà hàm truy vấn. Để chèn một hàng mới qua TVF, chỉ cần sử dụng cùng một cú pháp T-SQL INSERT mà bạn sẽ sử dụng nếu chèn dữ liệu trực tiếp vào bảng.

Hàm nào thực thi truy vấn SQL trong PHP?

Hàm query() / mysqli_query() thực hiện truy vấn cơ sở dữ liệu.

Làm cách nào để chèn nhiều giá trị vào một cột trong MySQL bằng PHP?

Người ta cũng có thể chèn nhiều hàng vào một bảng bằng một truy vấn chèn cùng một lúc. Để làm điều này, hãy bao gồm nhiều danh sách giá trị cột trong câu lệnh INSERT INTO, trong đó giá trị cột cho mỗi hàng phải được đặt trong dấu ngoặc đơn và được phân tách bằng dấu phẩy .