MySQLはNOT NULL制約は動作しません。
-
21-08-2019 - |
質問
私はとして作成された顧客テーブルにNOT 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' ...
そしてのでNOT NULL何も挿入されます。
他のヒント
私は、Oracle :-)とは対照的に、実際のDBMSで、ブランク値とNULL値の区別があり、そのためだ疑います。
空白文字列がNOT NULL
フィールドに完全に有効です。唯一の値は、あなたがNULL、...、覚えしようとすると、上のハングアップされNOT NULL
フィールドに配置することはできないはず。はい、それはそれです。ヌル。 : - )
あなたのPHPコードは(空白にNULLになる)は、Oracleのような仕事をしたい場合は、脇:(私はそのせいで問題のそれを使用することを拒否しただけではなかった場合でしょうか)Oracleは、NULL値として空のVARCHARを治療するための多くの衛星前に決断を下し、それはまだそれを見物
。
、あなたは文字列、(擬似コード)のようなものを事前処理する必要があるとしている。
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インジェクション攻撃を防ぐために修正する必要がある点に注意してください。
ここではドキュメントからのいくつかの追加情報:
http://dev.mysql.com /doc/refman/5.0/en/problems-with-null.htmlする