【先着1,000名様!】1,000円分をプレゼント!

初心者です。
フォームからPHPでMySQLに値を挿入したいのですが、
NULLの挿入の仕方がわかりません。
一応、’’で空文字を登録できるようにはしているのですが、NULLとは別物になるんですよね?
また、ネットで探してみたところ、\Nでいけると書いているところもあったような…しかし、\Nでは「N」が登録されてしまいます…
挿入方法を教えてください。お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

わたしも基本的にはphpMyAdminで試しているので間違いないです。



追加メニューからN空の値にチェックをつけて挿入した場合も、
フィールド値にNULLと書いてINSERT文を発行した場合も
同じ状態になります。

まさかとは思いますが、追加メニューからNULLと書いて
挿入していませんか?
それはたんに「NULL」という文字が挿入されるだけです。
表示をしてみると空のNULLはイタリックで表示されるので
見分けられます。

もう一度よくやり方を見なおしてください

この回答への補足

ご返答ありがとうございます。
>追加メニュー
とは何ですか?すいません。初心者なもので、、、

例えば↓これだったら
$sql = "INSERT INTO data
(year, month, day, comment)
VALUES
(NULL, \"$month\", \"$day\", \"$comment\")";

これで、NULLになると解釈していいのでしょうか?よろしくお願いします。

補足日時:2006/12/23 23:20
    • good
    • 4
この回答へのお礼

試したところ成功しました。ありがとうございます。初心者で申し訳ありませんでした。

お礼日時:2006/12/24 01:12

INSERT INTO `テーブル`


(`フィールド`)
VALUES (NULL);

NULLは「NULL」でいれればよいのでは?
当然ですがNOT NULL属性のテーブルには登録できません。

この回答への補足

ためしにやってみましたが、PHPmyadminでは、その「NULL」と空の値の「NULL」は別の表示がされます。当然、内容も空ではない値になっているようですが。どうなんでしょ?

補足日時:2006/12/23 20:47
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QデータベースのINT型項目にNULLはNG?

以前、知り合いからデータベースのINT型の項目には出来ればNULLを許可しない(NOT NULL)方がいいと聞いたことがあるのですが、本当でしょうか?

現在不動産の物件データを登録するためのシステムを作成しており、
データベースの設計を行なっている最中なのですが、
例えば金額や面積など数字しか入力されない項目はINT型にしたいと考えています。
※データベースはMySQLになります。

ただし、
物件データ登録時に数字項目に何も入力されなければ「NULL」、
0以上の数値を入力されている場合にはそのままその数値をデータベースに登録したいと考えています。
※0を入力されている場合には「0」をそのまま入れたいです。

INT型の項目にはNULLを入れるのを避けた方がいい場合には、0を入れるような仕様に変更しようと考えているのですが、その辺のことについて教えて頂けると助かります。

ざっくりとした質問で申し訳ございませんが、宜しくお願い致します。

Aベストアンサー

物件データ登録時に数字項目に何も入力されなければ「NULL」、0を入力されている場合には「0」
本来の意図としては正しいはずです。
Nullは本来、どの値を入れればいいのかわからない値ということなので、
数字がわからない=何も入力していない ということで、Nullを指定するのは正しいはずです。
しかし、
実際に使うときには、Nullは実に不自由なので、
Nullは使うなという話がでてきます。
## 私なら、入力区分 0=未入力、1=入力 と 数値(未入力は0)と別々に持つかもしれません。

というのは例えば、
金額 100万以上の物件は何件?
というSQLに対して、100件と答えがでて、
金額 100万未満の物件は何件?
というSQLに対して、50件と答えがでたとします。
じゃあ、全物件は?・・・172件だったりします。
何故?⇒Nullが22件だったためです。
(Nullは0とは違い、どちらの検索条件にも含まれません。)
・・・この不自由さを回避するために数値項目に、Not Null制約をつけることが多いです。

QERROR1062:Duplicate entry.....というエラーが出てしまいました

いつもお世話になります。
データベースからSELECTで抽出したデータを別のテーブルにINSERTするSQLを実行したのですが、
ERROR1062:Duplicate entry.....というエラーが出てしまいました。
お詳しい方がいらっしゃいましたら、アドバイスをいただけませんでしょうか?よろしくお願いいたします。
【実行したSQL】
INSERT INTO tblA (dataA1, dataA2, dataA3, dataA4) SELECT "9001","AA",dataB1,dataB2 FROM tblB WHERE dataB1 = 52

tblAの主キー:dataA1とdataA2
tblBの主キー:dataB1

dataA1とdataA2はtblAの主キーとなっているため、重複してしまうということのようです。tblBの主キーはdataB1であるため、抽出されてくるデータは常に1件なので問題ないと期待していましたが、甘くなかったようです。何か良い方法はないものでしょうか?よろしくお願いいたします。

Aベストアンサー

「ERROR 1062」は、重複データを格納しようとした場合に出力されるエラーです。
既にdataA1='9001'&dataA2='AA'という行が、tblAに格納されているのですよね?

>抽出されてくるデータは常に1件なので問題ないと期待していました

「insert ~ select ~」を実行前に、既に同じデータが格納されているのでは?
あるいはprimary keyの指定が、質問中に記された通りでなく、2件以上検索されているかです。

>何か良い方法はないものでしょうか?

何をするための方法を、聞きたいのかが分かりませんが?

Qint型フィールドにnullを登録できない・・・

> insert into tbl_tst values (001,'',21000,,22,4400,'3~4日','∞')
とすると syntax error になってしまいます。

> insert into tbl_tst values (001,'',21000,'',22,4400,'3~4日','∞')
とすると out of range になってしまいます。

> insert into tbl_tst values (001,'',21000,0,22,4400,'3~4日','∞')
は通常に登録できます。

> insert into tbl_tst values (001,'',21000,'0',22,4400,'3~4日','∞')
も通常に登録できます。

4カラム目のフィールドなのですが、show fields で見ても
int(11) Null→YES  Default→NULLとなっております。
NULLを登録(何も値を入れない)したいのですが、
どうすればよいでしょうか。
ご存知の方いらっしゃいましたらご教示願います。
宜しくお願い致します。

> insert into tbl_tst values (001,'',21000,,22,4400,'3~4日','∞')
とすると syntax error になってしまいます。

> insert into tbl_tst values (001,'',21000,'',22,4400,'3~4日','∞')
とすると out of range になってしまいます。

> insert into tbl_tst values (001,'',21000,0,22,4400,'3~4日','∞')
は通常に登録できます。

> insert into tbl_tst values (001,'',21000,'0',22,4400,'3~4日','∞')
も通常に登録できます。

4カラム目のフィールドなのですが、show fields で見ても
int(...続きを読む

Aベストアンサー

insert into tbl_tst values (001,'',21000, NULL ,22,4400,'3~4日','∞')
です

Q日付型のフィールドに空白を入れる方法を教えてください

ASP(VBScript)でSQLサーバにINSET INTO文を使ってデータを格納しているのですが、日付の部分がNULLの時、「1900/1/1」が入ってしまいます。
そのまま、空白を入れる方法はどうやったらよろしいのでしょうか?

TABLE1の内容は
番号|内容|日付です。

INSERT INTO TABLE1 VALUES ( 1, 'あいう', '')

結果
1|あいう|1900/1/1

Aベストアンサー

あとは、プログラムの書き方次第ですね、、、


If hensu=Null Or hensu="" Then
dt = "NULL"
Else
dt = "'" & hensu & "'"
End IF

E_SQL = "INSERT INTO TABLE1 VALUES & _
"( 1,'あいう', " & dt& ")"
の様に書きます。

Q変数にNULLを代入したい

変数にNULLを代入してMYSQLに保存したいのですが、
$var = NULL;
これでやってもMYSQLにはNULLで保存されずに、空欄のままになってしまいます。
MYSQLの構造は
ヌル(NULL) → はい
デフォルト値 → NULL
にしてあります。
何が原因でしょうか?

Aベストアンサー

実行されるSQL文を確認してみてください。

おそらくですが、該当部分は '' と言う風になっていないでしょうか。
insert into テーブル名 (項目名) values ('')
update テーブル名 set 項目名=''

データに NULL を出力するには、SQL文で NULL と記述する必要があります。
insert into テーブル名 (項目名) values (NULL)
update テーブル名 set 項目名=NULL

SQL文の生成が以下のようですと NULL を出力できません。
$sql = "insert into テーブル名 (項目名) values ('$var')"
$sql = "update テーブル名 set 項目名='$var'"

もしそれが原因でしたら、以下のような関数で補ってください。
//クォートでくくる
function fnc_quot($str){
if (is_null($str)){
return "NULL";
}else{
return "'$str'";
}
}
$sql = "insert into テーブル名 (項目名) values (".fnc_quto($var).")";
$sql = "update テーブル名 set 項目名=".fnc_quto($var)

$var の値が NULL であれば "NULL" と言う文字列を返し、
そうでなければ $var の値を '' でくくって返します。

PHPにそのような関数が最初からあるのかも知れませんが、
内容はおそらくこのような処理をしているのだろう、
とわかっていただければと思います。

実行されるSQL文を確認してみてください。

おそらくですが、該当部分は '' と言う風になっていないでしょうか。
insert into テーブル名 (項目名) values ('')
update テーブル名 set 項目名=''

データに NULL を出力するには、SQL文で NULL と記述する必要があります。
insert into テーブル名 (項目名) values (NULL)
update テーブル名 set 項目名=NULL

SQL文の生成が以下のようですと NULL を出力できません。
$sql = "insert into テーブル名 (項目名) values ('$var')"
$sql = "upd...続きを読む

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

QDBエラーの意味

フォームからDBにデータ挿入しようとすると

Column count doesn't match value count at row 1

というエラーが出てしまいます・・・どういう意味を持ったエラーなんでしょうか?

Aベストアンサー

カラム数と値の数が合わない、と言う事です。簡単な英語なので覚えましょう。
カラム数が4つにもかかわらず、
"INSERT INTO tablename VALUES (1,'hoge',3)"
とやった場合等に出るエラーだと思います。

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

QCSVからNULL値をインポート

phpMyAdminを使用してcsvからデータをインポートしようとしています。
通常の値は問題なくインポートできるのですが、NULL値があるフィールドがどうしても「0」になってしまいます。(そのフィールドはNULL値が入力可で、デフォルト値もNULLです)

csvからNULL値をインポートする方法をご教授下さい。

宜しくお願いします。

※\Nを入力するとNULLになるという情報があったため、
"1";"2";"3";"4";\N
"1";"2";"3";"4";"\N"
(1.2.3.4は適当な文字で、5番目をNULLにしたい)
の両方を試みましたが、入力結果は「0」でした。

phpMyAdmin - 2.10.2
MySQL クライアントのバージョン: 5.0.18
フィールド区切り記号 ;
フィールド囲み記号 ""

Aベストアンサー

"1";"2";"3";"4";NULL

でいけませんか?

QHTMLフォームのSELECTの幅を一定にするためには?

HTMLフォームのSELECTの幅を一定にするためにはどのようにすれば
いいのでしょうか?

CSS等で設定できるとありがたいのですが、やり方がわかりません。

Aベストアンサー

<select style="width: 200px">


人気Q&Aランキング