2015-02-03 3 views
1

PHP를 사용하여 양식의 데이터를 입력하려고합니다. 내가 뭔가이 잘못 갔다 mysql 중복 오류 처리

같은 잘못된 메시지가 나올 중복 된 데이터를 입력 할 때 :

INSERT INTO customer VALUES('jamie9422','Jamie Lannister','sept of baelor','[email protected]',9422222222,0) Duplicate entry 'jamie9422' for key 'PRIMARY' " 

대신, 나는 깨끗하고 오류 메시지를 표시합니다. 어떻게해야합니까? 지금까지 작성한 코드는 다음과 같습니다.

<?php 
    include_once "dbConnect.php"; 
    $connection=connectDB(); 

    if(!$connection) 
    { 
     die("Couldn't connect to the database"); 
    } 
    $tempEmail = strpos("{$_POST["email"]}","@"); 

    $customer_id=substr("{$_POST["email"]}",0,$tempEmail).substr("{$_POST["phone"]}",0,4); 

    //$result=mysqli_query($connection,"select customer_id from customer where customer_id='$customer_id' "); 
    //echo "customer_id is".$result; 

    $query = "SELECT * FROM CUSTOMER WHERE CUSTOMER_ID='$customer_id'"; 

    $customer_idcip = $customer_id-1; 
    echo $customer_idcip; 

    if (mysql_query($query)) { 
     echo "It seems that user is already registered"; 
    } else { 
     $command = "INSERT INTO customer VALUES('{$customer_id}','{$_POST["name"]}','{$_POST["address"]}','{$_POST["email"]}',{$_POST["phone"]},0)"; 

     $res =$connection->query($command); 
     if(!$res){ 
      die("<br>Something went wrong with this:{$command}\n{$connection->error}"); 
     } 

     echo "Welcome ".$_POST["name"]." \nCongratulations on successful Registration. Refill your Wallet here"; 

     //$cutomerRetrival = mysql_query("select from customer where customer_id='$customer_id'"); 
     echo "<br>Please note your customer ID :".$customer_id;     
    }  
    /*if($result) 
    { 
     echo "Query Fired"; 
     $dupentry = mysqli_num_rows($result); 
     if($dupentry==1) 
     { 
      echo "You are already Registered"; 
      exit; 
     } 
    }*/ 
?> 
+0

데이터베이스 테이블에 이미 'jamie9422'라는 사용자가있다. – vaso123

+0

삽입하기 전에 중복 키를 확인하십시오. – degr

답변

-1

Try Catch을 대신 사용하십시오.

try{ 
    $res =$connection->query($command); 
}catch(Exception $e){ 
    die("Write your error appropriate message here"); 
} 
+0

'$ e-> getMessage()'는 try 블록에서 발생한 정확한 오류를 나타냅니다. 이 경우 예외 처리가 더 중요합니다. –

+0

누군가 내 대답을 좋아하지 않았습니다. 왜? : –

0

error code (number) is 1022입니다.
예 :

define('ER_DUP_KEY', 1022); 

처럼 (X 개월 동안 다른 사람이 코드를 이해 할 수있는 기회를 가질 수 있도록) 다음 않는에 대한 상수를 정의

if(!$res){ 
    if (<error code>==ER_DUP_KEY) { 
    handleDuplicateEntryError(); 
    } 
    else { 
    die("<br>Something went wrong with this:{$command}\n{$connection->error}"); 
    } 
} 

같은 내가 어떻게 $res =$connection->query($command); 일을 알고하지 않기 때문에 (그리고 무엇 $connection 내가 정확히 <error code>==ER_DUP_KEY을 구현하는 방법을 말할 수 없다 무엇 mysql_errno을 사용하여 될 수 있습니다. 하지만 그것은 어쨌든 mysql_query($query), 낡은, 사용되지 않는 mysql_ * 확장명 및 일부 사용자 정의 클래스와 혼합 것으로 보인다. 먼저 ......... 그 문제를 해결하려면
http://docs.php.net/manual/en/mysqlinfo.api.choosing.php

0

귀하의 코드가 제대로

변경

if (mysql_query($query)) { 
    echo "It seems that user is already registered"; 
} 

또한

$result = mysql_query($query); 
if (mysql_num_rows($result)) { 
    echo "It seems that user is already registered"; 
} 

레코드를 기존를 확인하지 않습니다, 먼저 탈출하지 않고 $ _POST 변수를 사용하지 마십시오 mysql_real_escape_string()과 같은 것을 사용하여 사용자로부터 전달 된 각 변수를 이스케이프 처리하고, 그렇지 않으면 귀하의 웹 사이트는 SQL Injection으로 정말 빠르게 해킹 될 것입니다.

+0

downvote 설명해 주시겠습니까? –

0

업데이트를 한 후 '고객이 이미 등록했습니다.'라는 오류 메시지가 표시되도록 시도하십시오.

$query = "SELECT * FROM CUSTOMER WHERE CUSTOMER_ID='$customer_id'"; 
$res= mysql_query($query); 
$customer_count = mysql_num_rows($res); 

$customer_idcip = $customer_id-1; 
echo $customer_idcip; 

if ($customer_count > 0) { 
echo "It seems that user is already registered"; 
} else { 
    ................................... 
+0

내 대답과 다른 점은 무엇입니까? –

0

감사합니다. 사실 connectDB.php 파일에 mysqli API를 사용하고있었습니다 .. 따라서 mysqli에서 함수를 호출해야했습니다. 대신 mysql을 호출했습니다. 즉 새 연결을 만들었으므로 쿼리가 전혀 실행되지 않았습니다. 객체 지향 스타일 인 mysqli-> query ($ result)로 바뀌었고 잘 돌아갔다. ...