복붙노트

mysql에 행이 있는지 확인하십시오.

PHP

mysql에 행이 있는지 확인하십시오.

행이 있는지 확인하는 데 도움이 필요합니다. "이메일은 더 이상 존재하지 않습니다."publisher@example.com.

mysqli에 행이 있는지 확인하는 더 좋은 방법이 있습니까?

if (count($_POST)) {
    $email = $dbl->real_escape_string(trim(strip_tags($_POST['email'])));
    $passwd = $dbl->real_escape_string(trim(strip_tags($_POST['passwd'])));

    $query = "SELECT `email` FROM `tblUser` WHERE `email` = '$email'";
    $result = mysqli_query($dbl,$query); 
    if(is_resource($result) && mysqli_num_rows($result) == 1 ){
            $row = mysqli_fetch_assoc($result);
            echo $email . " email exists " .  $row["email"] . "\n";
    }
    else{
            echo "email no longer exists" . $email . "\n";
    }   
}

해결법

  1. ==============================

    1.

    다음은 행이 있는지 확인하기 위해 시험되고 검증 된 검증 된 방법입니다.

    (일부는 나 자신을 사용하거나 과거에 사용 했음).

    편집 : mysqli_query ()를 두 번 사용하는 구문에서 이전 오류가 발생했습니다. 개정판을 참조하십시오.

    즉 :

    if (! mysqli_query ($ con, $ query))는 단순히 if (! $ query)로 읽어야합니다.

    사이드 노트 : ''. $ var. ''와 '$ var'는 모두 같은 일을합니다. 둘 중 하나를 사용할 수 있으며, 둘 다 유효한 구문입니다.

    다음은 편집 된 두 가지 쿼리입니다.

    $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
    
    }
    

    그리고 귀하의 경우 :

    $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
    
    }
    

    mysqli_를 prepared statement 메소드와 함께 사용할 수도있다.

    $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;
    
                }
            }
        }
    

    또는 준비된 진술을 사용한 PDO 방법 :

    <?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.";
        }
    
    
        }
    ?>
    

    N.B. :

    위에 사용 된 양식 및 POST 배열을 다루는 경우 POST 배열에 값이 들어 있는지, 양식에 POST 메서드가 사용되고 입력에 대해 명명 된 특성이 일치하는지 확인하십시오.

    참고 : - $ _POST [ 'var']는 일치합니다. $ _POST [ 'Var'] 일치하지 않습니다.

    찾다:

    오류 검사 참조 :

    이 Q & A를 방문하고 있고 mysql_을 사용하여 (와 쿼리 할 때) MySQL API가 섞이지 않는다는 점에 유의하십시오.

    이에 대해 다음을 참조하십시오.

    mysql_ API를 사용하고 있고 그것을 사용할 선택이 없다면, 스택에 관한 다음 Q & A를 참고하십시오 :

    mysql_ * 함수는 더 이상 사용되지 않으며 향후 PHP 릴리스에서 제거 될 예정입니다.

    UNIQUE 제약 조건을 (a) 행에 추가 할 수도 있습니다.

    참고 문헌 :

  2. ==============================

    2.

    당신은 당신의 쿼리를 실행하고 쿼리를 $ 이메일에 추가해야한다. 문자열이다. is_resource ($ query) $ 쿼리를 제거하면 문자열이되고 $ 결과는 리소스가된다.

    $query = "SELECT `email` FROM `tblUser` WHERE `email` = '$email'";
    $result = mysqli_query($link,$query); //$link is the connection
    
    if(mysqli_num_rows($result) > 0 ){....}
    

    최신 정보

    귀하의 편집에 자료를 변경하십시오 :

    if(is_resource($query) && mysqli_num_rows($query) > 0 ){
            $query = mysqli_fetch_assoc($query);
            echo $email . " email exists " .  $query["email"] . "\n";
    

    으로

    if(is_resource($result) && mysqli_num_rows($result) == 1 ){
            $row = mysqli_fetch_assoc($result);
             echo $email . " email exists " .  $row["email"] . "\n";
    

    너 괜찮을거야.

    업데이트 2

    더 나은 방법은 매개 변수로 전자 메일을 전달하는 다음 SQL을 실행하는 저장 프로 시저가 있어야합니다.

    SELECT IF( EXISTS (
                      SELECT *
                      FROM `Table`
                      WHERE `email` = @Email)
              , 1, 0) as `Exist`
    

    그리고 PHP에서 값을 검색

    Pseudocodigo :

     $query = Call MYSQL_SP($EMAIL);
     $result = mysqli_query($conn,$query);
     $row = mysqli_fetch_array($result)
     $exist = ($row['Exist']==1)? 'the email exist' : 'the email doesnt exist';
    
  3. ==============================

    3.

    유효성 검사 후 INSERT 전에 username이 이미 있는지 검사하고 mysqli (절차 적)를 사용합니다. 작동 방식 :

    //check if username already exists
           include 'phpscript/connect.php'; //connect to your database
    
           $sql = "SELECT username FROM users WHERE username = '$username'";
           $result = $conn->query($sql);
    
           if($result->num_rows > 0) {
               $usernameErr =  "username already taken"; //takes'em back to form
           } else { // go on to INSERT new record
    
  4. from https://stackoverflow.com/questions/22252904/check-if-row-exists-with-mysql by cc-by-sa and MIT lisence