Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để kiểm tra xem một hàng có tồn tại trong MySQL hay không? (tức là kiểm tra xem email có tồn tại trong MySQL hay không)

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."''$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:

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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hỗ trợ giao dịch công cụ MyIsam

  2. Một cái nhìn chuyên sâu về Lập chỉ mục cơ sở dữ liệu

  3. Các lớp lồng nhau - CustomRowMapper !! Nó không còn là một vấn đề nữa !! - Phần 1

  4. '0000-00-00 00:00:00' không thể được biểu thị dưới dạng java.sql. Lỗi dấu thời gian

  5. Kiến trúc bảo mật:Hướng dẫn cho MySQL