Sau đây là các phương pháp đã thử, đã thử nghiệm và đã được chứng minh để kiểm tra xem hàng có tồn tại hay không.
(Một số trong số đó tôi tự sử dụng hoặc đã sử dụng trước đây).
Chỉnh sửa: Tôi đã mắc lỗi cú pháp trước đó khi tôi sử dụng mysqli_query()
hai lần. Vui lòng tham khảo (các) bản sửa đổi.
Tức là:
if (!mysqli_query($con,$query))
mà lẽ ra phải đọc là if (!$query)
.
- Tôi xin lỗi vì đã bỏ qua sai lầm đó.
Ghi chú bên lề: Cả '".$var."'
và '$var'
Làm điều tương tự. Bạn có thể sử dụng một trong hai, cả hai đều là cú pháp hợp lệ.
Đây là hai truy vấn đã chỉnh sửa:
$query = mysqli_query($con, "SELECT * FROM emails WHERE email='".$email."'");
if (!$query)
{
die('Error: ' . mysqli_error($con));
}
if(mysqli_num_rows($query) > 0){
echo "email already exists";
}else{
// do something
}
và trong trường hợp của bạn:
$query = mysqli_query($dbl, "SELECT * FROM `tblUser` WHERE email='".$email."'");
if (!$query)
{
die('Error: ' . mysqli_error($dbl));
}
if(mysqli_num_rows($query) > 0){
echo "email already exists";
}else{
// do something
}
Bạn cũng có thể sử dụng mysqli_
với một tuyên bố đã chuẩn bị sẵn
phương pháp:
$query = "SELECT `email` FROM `tblUser` WHERE email=?";
if ($stmt = $dbl->prepare($query)){
$stmt->bind_param("s", $email);
if($stmt->execute()){
$stmt->store_result();
$email_check= "";
$stmt->bind_result($email_check);
$stmt->fetch();
if ($stmt->num_rows == 1){
echo "That Email already exists.";
exit;
}
}
}
Hoặc phương pháp PDO với một tuyên bố đã chuẩn bị sẵn :
<?php
$email = $_POST['email'];
$mysql_hostname = 'xxx';
$mysql_username = 'xxx';
$mysql_password = 'xxx';
$mysql_dbname = 'xxx';
try {
$conn= new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
exit( $e->getMessage() );
}
// assuming a named submit button
if(isset($_POST['submit']))
{
try {
$stmt = $conn->prepare('SELECT `email` FROM `tblUser` WHERE email = ?');
$stmt->bindParam(1, $_POST['email']);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
}
}
catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
if($stmt->rowCount() > 0){
echo "The record exists!";
} else {
echo "The record is non-existant.";
}
}
?>
- Tốt nhất nên sử dụng các câu lệnh chuẩn bị để giúp bảo vệ chống lại việc đưa vào SQL.
N.B:
Khi xử lý biểu mẫu và mảng POST như được sử dụng / nêu ở trên, hãy đảm bảo rằng mảng POST chứa các giá trị, phương thức POST được sử dụng cho biểu mẫu và khớp các thuộc tính được đặt tên cho các đầu vào.
- FYI:Các biểu mẫu được mặc định thành phương thức GET nếu không được hướng dẫn rõ ràng.
Lưu ý:<input type = "text" name = "var">
- $_POST['var']
trận đấu. $_POST['Var']
không có trận đấu.
- Mảng POST phân biệt chữ hoa chữ thường.
Tham khảo ý kiến:
Lỗi khi kiểm tra tham chiếu:
- http://php.net/manual/en/ Chức năng. error-report.php
- http://php.net/manual/en/mysqli.error. php
- http://php.net/manual/en/pdo. error-processing.php
Xin lưu ý rằng các API MySQL không trộn lẫn với nhau, trong trường hợp bạn có thể đang truy cập phần Hỏi và Đáp này và bạn đang sử dụng mysql_
để kết nối với (và truy vấn với).
- Bạn phải sử dụng cùng một phương thức từ kết nối đến truy vấn.
Tham khảo những điều sau về điều này:
Nếu bạn đang sử dụng mysql_
API và không có lựa chọn nào để làm việc với nó, sau đó tham khảo phần Hỏi và Đáp sau trên Stack:
mysql_*
các hàm không được dùng nữa và sẽ bị xóa khỏi các bản phát hành PHP trong tương lai.
- Đã đến lúc bước sang thế kỷ 21.
Bạn cũng có thể thêm ràng buộc DUY NHẤT vào (một) hàng.
Tài liệu tham khảo:
- http://dev.mysql. com / doc / refman / 5.7 / en / bind-primary-key.html
- http://dev.mysql.com/ doc / refman / 5.7 / en / alter-table.html
- Làm cách nào để kiểm tra xem một giá trị đã tồn tại hay chưa để tránh trùng lặp?
- Cách thêm khóa duy nhất vào bảng hiện có (với các hàng không phải là duy nhất)