Làm cách nào để kiểm tra xem thực thi có thành công trong PHP không?

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

Làm cách nào để kiểm tra xem thực thi có thành công trong PHP không?

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)

Làm cách nào để kiểm tra xem thực thi có thành công trong PHP không?

Đầ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

Làm cách nào để kiểm tra xem thực thi có thành công trong PHP không?

Làm cách nào để kiểm tra xem thực thi có thành công trong PHP không?

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

Làm cách nào để kiểm tra xem thực thi có thành công trong PHP không?

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

Sự 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 để kiểm tra xem một truy vấn có được thực thi thành công trong PHP không?

Làm cách nào để kiểm tra truy vấn PDO thành công trong PHP? . exec không thành công (trả về FALSE hoặc 0), sử dụng toán tử === để kiểm tra nghiêm ngặt giá trị được trả về với FALSE .

Thực thi () trả về gì trong PHP?

Hàm exec() là một hàm có sẵn trong PHP, dùng để thực thi một chương trình bên ngoài và trả về dòng cuối cùng của kết quả . Nó cũng trả về NULL nếu không có lệnh nào chạy đúng.

Làm cách nào để kiểm tra xem truy vấn cập nhật có thành công trong PHP MySQL không?

Sử dụng if(mysqli_affected_rows($mysqli) >0 ) hoặc không so sánh gì cả. phụ lục. ==1 chỉ so sánh với 1, trái ngược với >0 mà bạn có thể đang cố cập nhật nhiều hàng. Tuy nhiên và trong một số trường hợp hiếm hoi, >0 là bắt buộc khi điều này cũng đã xảy ra với tôi trước đây; .

Làm cách nào để kiểm tra xem việc chèn có thành công trong mysql không?

$mysqli->connect_error); . com')"; if($mysqli->query($sql) === true){ echo "Đã chèn bản ghi thành công. " ; } khác{ tiếng vang "LỖI. Không thể thực thi $sql. ".