문제

나는 다음과 같이 만든 고객 테이블에서 null 제약 조건을 구현하려고합니다.

CREATE TABLE CUSTOMER(
     cust_id INT(5) NOT NULL AUTO_INCREMENT, 
     PRIMARY KEY(cust_id),
     first_name VARCHAR(25) NOT NULL,
     last_name VARCHAR(25) NOT NULL,
     email VARCHAR(25) NOT NULL,
     password VARCHAR(25) NOT NULL,
     gender VARCHAR(1) NOT NULL,
     city VARCHAR(25) NOT NULL,
     dob DATE NOT NULL,
     pin INT NOT NULL);

이 후 양식에서 값을 전달하고 다음과 같이 삽입합니다.

$sql= "INSERT INTO customer(first_name,last_name,email,password,gender,city,dob,pin) VALUES('$first_name','$last_name','$email_add','$password','$gender','$city','$DOB','$pin')";

그러나 필드의 빈 값을 전달하면 MySQL이 삽입되는 것 같습니다. 가능한 문제는 무엇입니까 ??

도움이 되었습니까?

해결책

$sql= "INSERT INTO customer(first_name,last_name,email,password,gender,city,dob,pin) VALUES('$first_name',".
($last_name?"'".$last_name."'":"NULL").
", '$email_add','$password','$gender','$city','$DOB','$pin')";

이것은 ~이 될 것이다:

VALUES('ahm',NULL,'email@a.ddr' ...

그리고 널 있지 않기 때문에 아무것도 삽입되지 않습니다.

다른 팁

실제 DBMS에서는 Oracle과는 반대로 빈 값과 널 값 사이에 차이가 있기 때문입니다.

블랭크 스트링은 완벽하게 유효합니다 NOT NULL 필드. 당신이 넣을 수없는 유일한 가치 NOT NULL 필드는, 매달리고, 기억하려고 노력하고 있습니다. 맞어 그거야. 없는. :-)

외로 : 오라클은 빈 바르 차를 널로 취급하기로 결정한 많은 달을 결정했지만 여전히 그들을 괴롭 히고 있습니다 (또는 그 문제로 인해 사용을 거부 한 유일한 사람이 아니라면).

PHP 코드가 Oracle (빈 공백이 널이되는 곳)처럼 작동하기를 원한다면 (pseudo-code)와 같은 문자열을 사전 프로세스해야합니다.

if $first_name == "":
    $first_name = "NULL"
else:
    $first_name = "'" + $first_name + "'"
: : :
$sql= "INSERT INTO customer(" +
    "first_name," +
    "last_name," +
    "emailpassword," +
    "gender," +
    "city," +
    "dob," +
    "pin" +
    ") VALUES (" + 
        $first_name + "," +
        "'$last_name'" + "," +
        "'$email_add'" + "," +
        "'$password'" + "," +
        "'$gender'" +
        ",'$city'" + "," +
        "'$DOB'" + "," +
        "'$pin'" +
    ")";

그리고 무효가 될 수있는 다른 분야의 경우도 마찬가지입니다. 나는 그것을하는 방법 만 보여 주었다 $first_name.

그것은 당신의 첫 _name 열에서 INSERT 어떤 진술도 NULL 또는의 가치 $first_name 단일 따옴표로 둘러싸여 있습니다.

SQL 주입 공격을 방지하기 위해 이러한 모든 필드를 점검 및/또는 수정해야합니다.

문서의 몇 가지 추가 정보는 다음과 같습니다.

http://dev.mysql.com/doc/refman/55.0/en/problems-with-null.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top