2011-10-28 24 views
0

私はNOT NULL列のテーブルを持っていますが、NULLという値のPHPスクリプト(クエリの挿入)を実行すると、データベースはNULLの値を持つ行を挿入します。私は、データがないときにエラーメッセージを表示したいと思います。私は次のSQLMODEを持っています。NULL値を受け入れない列

STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

何が問題なのだろうか?どのような入力をありがとう。

CREATE TABLE `TABLE1` (
    `aId` int(11) NOT NULL auto_increment, 
    `FirstName` varchar(100) NOT NULL, 
    `LastName` varchar(100) NOT NULL, 
    `CreateDTM` timestamp NOT NULL default CURRENT_TIMESTAMP, 
    PRIMARY KEY (`aId`) 
) 

      $first = $_POST["first"]; 
      $first = mysql_real_escape_string($first); 
      $last = $_POST["last"]; 
      $last = mysql_real_escape_string($last); 

    $insertsql = "INSERT INTO TABLE1(FirstName,LastName) VALUES ('".$first."', '" .$last. "')"; 
+0

データベース構造と正確なコードを挿入したデータを表示してください。単純な "NULL"文字列ではなく、MySQLのNULL値を挿入してもよろしいですか? – str

+0

そして、NULL値はどこに挿入されていますか? – str

答えて

0

値はnullではなく、空の文字列です。それらは完全に別々の2つの値です。これを試してみると、エラーが表示されます。

 $first = !empty($_POST["first"])?mysql_real_escape_string($_POST['first']):null; 
     $last = !empty($_POST["last"])?mysql_real_escape_string($_POST['last']):null; 

エラーが発生します。 ? :基本的に、3項演算子と呼ばれる短縮されたif/else文です。

本当の解決方法は、エラーを投げるデータベースに頼るのではなく、クエリを実行する前にチェックしてください。エラーメッセージを少しきれいに処理し、間違っていることをユーザーに知らせます。

EDIT

なぜ上記のNULLに設定にもかかわらず、挿入されましたか?

 $insertsql = "INSERT INTO TABLE1(FirstName,LastName) VALUES ('".$first."', '" .$last. "')"; 

文字通り$firstの値になるだろう単一引用符を、注意してください。これはプリペアドステートメントなどがデータベースタスクを行うためのより良い方法である理由です。私が賭けていることを一重引用符で徹底的に取り除いたとしても、nullは許可されません。

+0

まだヌル値を挿入しています。 – nav100

+0

まあ、あなたは一重引用符で 'INSERT'ステートメントのデータを囲んでいます。これは、文字通り「NULL」をとる可能性があります。前述のように、より良いエラーチェックシステムを実装し、MySQLに依頼してあなたのために行うべきではありません。それらの値は本当にNULLではないので、それらを一重引用符で囲むことになります。 –

+0

一重引用符を削除すると、次のエラーが表示されます。 "あなたはあなたのSQL構文に誤りがあります;あなたのMySQLサーバのバージョンに対応するマニュアルをチェックしてください" – nav100

関連する問題