Làm thế nào sử dụng PHP để insert into MySQL Database

Làm thế nào sử dụng PHP để insert into MySQL Database

Trong bài hướng dẫn này, chúng tôi sẽ chỉ cách bạn quản lý database từ scripts PHP của bạn. Bạn sẽ biết cách làm thế nào để sử dụng PHP để INSERT INTO MYSQL DATABASE bằng MySQLi method và PHP Data Object. Trước khi bắt đầu bài hướng dẫn PHP MySQL insert data này, bạn cần truy cập được vào control panel hosting hoặc WordPress hosting của bạn trước.

Nếu bạn không chắc làm thế nào để thiết lập kết nối MySQL bạn có thể xem qua bài hướng dẫn PHPMySQL  này. Nó có hướng dẫn quan trọng để làm việc giữa PHP và databases.

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

Đầu tiên, bạn cần tạo database để insert trong sql database. Việc tạo database này cũng rất đơn giản bạn chỉ cần thực hiện các bước sau:

  1. Tìm đến mục MySQL DatabaseControl Panel
    chọn mục MySQL database trong database để tạo database
  2. Tại mục Tạo Database MySQL mới và Database user mới, bạn nhập vào database name, database username và password rồi nhất nút Tạo là bạn đã tạo thành công database.

Sau khi đã có database. Hãy truy cập vào phpMyAdmin của databasae đó để tiến hành tạo bảng cho database. Rất đơn giản để làm vậy với phpMyAdmin, được đặt trong hosting control panel như bạn thấy ở hình trên. Sau khi vào trong trang phpMyAdmin, bạn sẽ thấy hình tương tự như sau:

vào trong hostinger phpmyadmin

Chúng tôi sẽ tạo bảng có tên Students cho database u266072517_name. Bạn có thể tạo bảng bằng cách click vào nút Create Table. Sau đó, bạn sẽ thấy trang này để bạn điền tất cả thông tin cần thiết cho bảng đó:tạo bảng trong phpmyadmin mysql database

Đây là bước thiết lập đơn giản nhất để bạn có thể sử dụng bảng, để biết thêm thông itn liên quan đến cấu trúc bảng/database và bất kỳ thiết lập nào khác liên quan đến những cột này, hãy xem qua hướng dẫn chính thức từ phpMyAdmin.

Bây giờ, đây là các giải thích cơ bản về cột mà chúng tôi đã sử dụng:

  • Name – Tên cột. Nó sẽ hiển thị trên đầu bảng.
  • Type – Bạn có thể phân loại cột ở đây. Ví dụ, chúng tôi chọn varchar vì chúng tôi cần điền một chuỗi tên ở đây (là ký tự, thay vì là số).
  • Length/Values – Được dùng để xác định độ dài của entry trong cột mà có thể có.
  • Index – Chúng tôi sử dụng “Primary” cho trường “ID”. Khi tạo bảng, chúng tôi khuyên có một cột ID. Được sử dụng để đánh số từng entries và để tạo mối quan hệ với các bảng khác. Chúng tôi cũng đánh chọn “A_I”, nghĩ làa  Auto Increment. Nó sẽ tự động tạo ra số tăng dần (1,2,3,4…).

Nhấn nút Save, bảng của bạn sẽ được tạo.

Viết PHP code để INSERT into MySQL database dữ liệu

Có hai phương pháp bạn có thể dùng để INSERT data into MySQL database. Phương pháp PHP MySQLi và PHP Data Object hoặc PDO method

Phương pháp MySQLi

Đầu tiên, bạn cần thiết lập kết nối tới database. Khi hoàn tất, chúng ta có thể bắt đầu sử dụng SQL query INSERT trong SQL. Đây là toàn bộ mã code PHP tạo kết nối và insert trong SQL cơ bản:

<?php
$servername = "mysql.hostinger.co.uk";
$database = "u266072517_name";
$username = "u266072517_user";
$password = "buystuffpwd";

// Create connection

$conn = mysqli_connect($servername, $username, $password, $database);

// Check connection

if (!$conn) {
      die("Connection failed: " . mysqli_connect_error());
}
 
echo "Connected successfully";
 
$sql = "INSERT INTO Students (name, lastname, email) VALUES ('Thom', 'Vial', 'thom.v@some.com')";
if (mysqli_query($conn, $sql)) {
      echo "New record created successfully";
} else {
      echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);

?>

Vậy là phần đầu tiên của code (dòng 3-18) được dùng cho kết nối tới database. Chúng tôi sẽ không giải thích nhiều về việc này nữa, nhưng nếu bạn muốn, bạn có thể tham khảo bài hướng dẫn về kết nối database trước của chúng tôi.

Hãy bắt đầu với dòng 19

$sql = "INSERT INTO Students (name, lastname, email) VALUES ('Thom', 'Vial', 'thom.v@some.com')";

Đây là dòng quan trọng nhất của code của chúng ta, nó làm tất cả mọi thứ chúng ta cần trong bài hướng dẫn này – insert into MySQL database dữ liệu cần thiết. INSERT INTO là lệnh để thêm dữ liệu vào bảng trong mysql database. Ở ví dụ của chúng tôi, chúng tôi đang thêm databa vào bảng có tên Students.

Hơn thế nữa, giữa cặp dấu ngoặc đơn, chúng tôi có cột được xác định cụ thể (name, lastname, email). Data sẽ được thêm vào theo tuần tự. Nếu chúng tôi viết (email, lastname, name), giá trị cũng sẽ được thêm vào theo thứ tự khác nhau đó.

Vậy điểm tiếp theo là statement VALUES. Tại đây chúng ta sẽ đưa dự liệu cụ thể vào từng cột tương ứng. Bằng cách này, mỗi cột sẽ có giá trị tương ứng. Ví dụ trong trường hợp này sẽ là: name = Thom, lastname = Vial, email = thom.v@some.com.

Một điểm đáng lưu ý là chúng tôi chạy SQL query bằng PHP code, SQL queries phải được đặt trong dấu nháy đơn. Ở ví dụ này, tất cả những gì trong nháy đơn và sau $sql = là một SQL query.

Tiếp theo ở code (20 – 22 lines) sẽ kiểm tra nếu SQL query được thực thi thành công hay không:

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

Nó chỉ đơn giản chạy thông báo query có thành công hay không.

Cuối cùng (dòng 22 – 24 ) hiển thị một thông báo khác trường hợp query của chúng ta không chạy được:

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

Nó sẽ cho chúng biết có lỗi nếu lỡ có gì không đúng xảy ra.

Phương pháp PHP Data Object (PDO)

Cũng như ở ví dụ trước, chúng ta thiết lập kết nối tới database trước, bằng cách tạo một object PDO – bài hướng dẫn kết nối tới mysql bằng PHP sẽ chỉ bạn cách làm này. Khi kết nối tới MySQL database là một PDO object, bạn phải sử dụng nhiều ‘methods‘ PDO (bất kỳ function nào là một phần của bất kỳ object nào) để chuẩn bị và chạy queries. Methods của objects được gọi như sau:

$the_Object->the_Method();

PDO cho phép bạn ‘prepare’ SQL code trước khi nó được thực thi. SQL query được đánh giá và ‘chỉnh sửa‘ trước khi chạy. Bởi vậy, một cuộc tấn công SQL injection có thể được làm chỉ bởi gõ mã SQL trong form điền thông tin.  is evaluated and ‘corrected’ before being run. 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ột cấu trúc SQL code đúng, dấu ; thực thi lệnh DROP DATABASE user_table thành một SQL query, và bảng user sẽ bị xóa. Các lệnh được chuẩn bị để không cho phép ” và ; làm dấu để kết thúc query gốc và mã độc DROP DATABASE sẽ không thể được thực thi.

Bạn phải luôn dùng prepared statements khi gửi hoặc nhận data từ databse với PDO.

Để sử dụng prepared statements, bạn phải viết một biến mới gọi method prepare() của database object.

Mã nguồn đúng:

<?php
$servername = "mysql.hostinger.com";
$database = "u266072517_name"; 
$username = "u266072517_user";
$password = "buystuffpwd";
$sql = "mysql:host=$servername;dbname=$database;";
$dsn_Options = [PDO::ATTR_ERRMODE => 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 = "Thom";
$last_Name = "Vial";
$email = "thom.v@some.com";

// 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 = "john.smith@email.com";
$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";
}

Ở dòng 28, 29 và 30, chúng tôi dùng method bindParam() của database object. Cũng có bindValue() nhưng cách dùng rất khác.

  • bindParam() – Phương pháp này đánh giá data khi thực thi method execute(). Lần đâu tiên scripts gặp method execute() nó thấy $first_Name là “Thom”, gán giá trị đó và chạy query. Khi scripts gặp method execute() thứ 2, nó thấy $first_Name liên quan đến “John”, gán giá trị đó và chạy lại query lần nữa với giá trị mới. Điều quan trọng cần nhớ là chúng tôi đã định nghĩa query một lần và sử dụng lại nó với data khác tại thời điểm khác trong script.
  • bindValue() – method đánh giá data ngay khi bindValue() được nhận. Khi giá trị $first_Name được gán thành “Thom” và bindValue() được thực hiện, nó sẽ được sử dụng mỗi lần method execute() được gọi cho $my_Insert_Statement.

Ghi chú là chúng tôi đã sử dụng lại biến $first_Name và cho nó giá trị mới ở lần thứ 2. Nếu bạn kiểm tra database sau khi chạy script, bạn sẽ có cả 2 tên, mặc dù $first_Name có nghĩa là “John” đã được gán ở cuối script. Hãy nhớ là PHP xem qua toàn bộ script trước khi thực sự chạy nó.

Nếu bạn cập nhật script và thay thế bindParam bằng bindValue, bạn sẽ insert into MySQL “Thom Vial” 2 lần trong database và John Smith sẽ bị bỏ qua.

Xác nhận thành công và giải quyết các lỗi thường gặp về insert into MySQL

Nếu query bạn chạy và insert into MySQL database thành công, bạn sẽ thấy thông báo sau:

Connect Successfully
New record created successfully

Sửa các lỗi thường gặp về Insert Into MySQL

Sẽ có lúc record mới gặp lỗi với SEL insert. Nhưng đừng lo, có nhiều cách để bạn sửa các lỗi MySQL này.

MySQLi

Trong các trường hợp khác, mỗi mã lỗi có thể được hiển thị. Ví dụ, hãy tạo một lỗi cấu trúc trong code của chúng ta và chúng ta và chúng ta thấy lỗi như sau:

Connect successfully
Error: INSERT INTO students {name, lastname, email} VALUES ('Test', 'Testing', 'Testing@testing.com')
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 ('Test', 'Testing', 'Test@testingcom')' at line 1"

Như chúng ta thấy, phần đầu tiên của code thì đúng rồi, kết nối thành công, nhưng SQL vẫn báo lỗi.

"Error: INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')
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', 'thom.v@some.com')' at line 1"

Đây là lỗi cấu trúc, và vì vậy nó sẽ khiến script chạy hỏng khi cố insert into MySQL. Lỗi nằm ngay đây:

$sql = "INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')";

Như bạn thấy, chúng ta đã dùng dấu móc ngoặc thay vì dấu ngoặc đơn. Nó sai và vì vậy bạn sẽ thấy bung lỗi syntax (lỗi cấu trúc)

PDO

Ở dòng 7 của kết nối PDO, chế độ báo lỗi được đặt là ‘display all exceptions’. Nếu nó bị bỏ khỏi script và query thất bạn, bạn sẽ không nhận bất kỳ mã lỗi nào. Với tùy chọn được kích hoạt, mã lỗi sẽ được hiển thị. Thường bạn chỉ nên làm vậy khi đang lập trình vì nếu lỗi hiển thị tên database và table ra, có thể khiến kẻ xấu thu thập các thôn gtin và cố truy cập và chèn mã độc hại vào data của bạn. Trong trường hợp trên khi dấu ngoặc kép được dùng thay vì dấu ngoặc đơn, lỗi này sẽ trông như sau:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; <code>check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')' at line 1"</code>

Các khả năng lỗi khác mà bạn có thể gặp phải:

  • Sai cột (non-existent columns or a spelling mistake).
  • Loại giá trị khác được gán vào một cột cho phép giá trị khác. Ví dụ, nếu bạn gán số 47 vào cột Name, chúng ta sẽ thấy lỗi vì nó có cần giá trị chuỗi thay vì số. Nếu cố gán số trong ngoặc kép “47”, có thể được nhưng số đó sẽ bị xem là chuỗi trong cột.
  • Cố thêm dữ liệu vào bảng trong mysql database mà không tồn tại, hoặc cố tạo lỗi spelling cho bảng.

Tất cả những lỗi này có thể được sửa dễ dàng bằng cách làm theo hướng dẫn sửa lỗi.

Sau khi nhập data thành công, chúng ta sẽ thấy nó được thêm vào database. Đây là ví dụ của data entry, nó đã được thêm vào database. Ví dụ này của bảng mà chúng ta đã thêm và data sẽ được hiển thị từ phpMyAdmin.

Hostinger phpmyadmin php insert trong mysql

Lời kết

Trong bài hướng dẫn này, bạn đã biết làm thế nào để dùng PHP để INSERT into MySQL database data cần thiết qua MySQLi PDO. Khi thêm dữ liệu vào bảng trong mysql, chúng tôi cũng chỉ bạn một số cách để troubleshoot một số lỗi kết nối phổ biến. Biết cách dùng PHP để insert trong MySQL rất hữu dụng nếu bạn đang học code hoặc đang tìm cách dựng website.

Author
Tác giả

Hai G.

Hải G. là chuyên gia quản lý, vận hành các dịch vụ website. Anh có nhiều năm kinh nghiệm về VPS, Hosting, technical SEO, CMS. Đặc biệt yêu thích WordPress và đã dùng nó hơn 5 năm nay. Sở thích của anh là đọc, viết blog, đi du lịch và tư vấn cho các bạn trẻ khởi nghiệp.