3

次のように作成されたcustomerテーブルにNOTNULL制約を実装しようとしています。

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はそれらを挿入しているように見えますか?考えられる問題は何ですか?

4

3 に答える 3

5

これは、Oracleとは対照的に、実際のDBMSでは、空白値とNULL値の違いがあるためだと思います。

NOT NULL空白の文字列は、フィールドに対して完全に有効です。フィールドに入れることができないはずの唯一の値NOT NULLは、ちょっと待って、覚えようとしている、...NULLです。はい、それだけです。ヌル。:-)

余談ですが、オラクルは何ヶ月も前に空のVARCHARをNULLとして扱うことを決定しましたが、それでもそれらを悩ませています(または、その問題のためにそれを使用することを拒否したのが私だけではなかった場合)。

PHPコードをOracleのように機能させたい場合(空白がNULLになる場合)、(擬似コード)のように文字列を前処理する必要があります。

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'" +
    ")";

同様にNULLになる可能性のある他のフィールドについても同様です。私はそれを行う方法を示しただけです$first_name

INSERTこれにより、ステートメントのfirst_name列は、または一重引用符で囲まれNULLた値になります。$first_name

SQLインジェクション攻撃を防ぐために、これらすべてのフィールドをチェックまたは変更する必要があることに注意してください。

于 2009-05-11T06:46:08.350 に答える
3
$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' ...

また、NOT NULLのため、何も挿入されません。

于 2009-05-11T06:56:49.800 に答える
0

ここのドキュメントからのいくつかの追加情報:

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

于 2009-05-12T07:00:00.283 に答える