2012-07-25 24 views
7

Tôi đang chèn dữ liệu vào một DB MySQL, trong trường hợp nếu chèn không thành công, tôi cần cung cấp thông báo lỗi thích hợp cho biết. Theo mã của tôi dưới đây tôi sẽ là Echo-ing tin nhắn Inserted nếu việc chèn thành công hay thất bại.Chèn dữ liệu vào MySql DB và hiển thị nếu chèn là thành công hay thất bại

Điều tôi muốn làm là lặp lại thông báo Inserted chỉ khi chèn dữ liệu thành công và trả lại fail nếu không thành công. Làm thế nào tôi có thể sửa đổi mã của tôi để làm như vậy?

<?php 

mysql_connect("localhost", "root", "123") or die(mysql_error()); 
mysql_select_db("swm_database") or die(mysql_error()); 

mysql_query("INSERT INTO PEOPLE (NAME) VALUES ('COLE')")or die(mysql_error()); 

echo "Inserted"; 
?> 
+0

câu trả lời dưới đây đã nêu rõ bạn nên làm gì, nhưng hãy nghĩ đến việc sử dụng mysqli hoặc PDO thay vì hàm mysql_ *. –

Trả lời

24
$result = mysql_query("INSERT INTO PEOPLE (NAME) VALUES ('COLE')")); 
if($result) 
{ 
echo "Success"; 

} 
else 
{ 
echo "Error"; 

} 
3

Sau INSERT truy vấn mà bạn có thể sử dụng ROW_COUNT() để kiểm tra các hoạt động chèn thành công như:

SELECT IF(ROW_COUNT() = 1, "Insert Success", "Insert Failed") As status; 
+1

Trả lại true không đảm bảo dữ liệu đã được chèn vào cơ sở dữ liệu, tôi có thể nói như vậy không? – Timeless

+0

có, đây là cách an toàn nhất vì trả về true sẽ không hoạt động trong trường hợp truy vấn 'INSERT IGNORE'. – Omesh

1
if (mysql_query("INSERT INTO PEOPLE (NAME) VALUES ('COLE')")or die(mysql_error())) { 
    echo 'Success'; 
} else { 
    echo 'Fail'; 
} 

Mặc dù kể từ khi bạn có or die(mysql_error()) nó sẽ hiển thị các mysql_error() trên màn hình khi nó không thành công. Có lẽ bạn nên loại bỏ nếu nó isnt kết quả mong muốn

2

Theo cuốn sách PHP and MySQL for Dynamic Web Sites (4th edition)

Ví dụ:

$r = mysqli_query($dbc, $q); 

Đối với các truy vấn đơn giản như INSERT , CẬP NHẬT, DELETE, v.v. (không trả về các bản ghi), biến số $r — viết tắt cho kết quả — sẽ là TRUE hoặc FALSE, tùy thuộc vào truy vấn được thực hiện thành công hay không.

Hãy nhớ rằng "được thực hiện thành công" có nghĩa là nó chạy mà không có lỗi; nó không có nghĩa là thực thi của truy vấn nhất thiết phải có kết quả mong muốn; bạn sẽ cần phải thử nghiệm cho điều đó.

Sau đó, làm cách nào để kiểm tra?

Trong khi mysqli_num_rows() hàm sẽ trả lại số hàng được tạo ra bởi một CHỌN truy vấn, mysqli_affected_rows() trả về số hàng bị ảnh hưởng bởi một INSERT, CẬP NHẬT, hoặc DELETE truy vấn. Nó được sử dụng như sau:

$num = mysqli_affected_rows($dbc); 

Không giống như mysqli_num_rows(), là lập luận chức năng mất là kết nối cơ sở dữ liệu ($ dbc), không phải là kết quả của truy vấn trước đó ($ r).

Các vấn đề liên quan