◆PHPバージョン
5.3.3
◆mysqlバージョン
4.1.22
◆テーブル情報
`no` int(11) NOT NULL auto_increment,
`name` text NOT NULL,
`mail` text NOT NULL,
`memo` text NOT NULL,
`updating` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`no`)
ENGINE=MyISAM DEFAULT CHARSET=utf8
◆SQL
(1)insert into test(name, mail, memo) values ('abc','abc@test.com','abc')
(2)insert test set name='abc', mail='abc@test.com', memo='abc'
◆処理概要
$conn = mysql_connect(ホスト、ユーザ、パスワード);
mysql_query("set names utf8");
$rs = mysql_select_db(DB名, $conn);
$result = mysql_query(SQL, $conn);
◆登録情報
(1, 'abc', 'abc@test.com', 'abc', '2011-09-02 16:28:57'),
(2, '', '', '', '2011-09-02 16:28:57'),
【問題】
上記SQL(1)、(2)どちらでDBに登録しても、登録情報のように同時に空データも同時に登録されてしまう
全く原因の検討がつかないので、何か手がかりがありましたらご教授頂けたらと思います。
どうぞよろしくお願いします。
No.3ベストアンサー
- 回答日時:
うまくいきませんか。
それではtimestamp型はやめて、datetime型にして、
$tmstmp = date("Y-m-d H:i:s");
$sqlstr = "insert into test(name, mail, memo, updating) values ('abc','abc@test.com','abc'," . $tmstmp . ")";
mysql_query($sqlstr, $conn);
といった操作を挿入クエリ発行の度にやってみてはどうでしょうか?
また、mysqlのinsert命令は、1文で一度に複数レコードを挿入できるようですから、insert命令の文字列の末尾に何か付いているのかもしれません。
これも助言のみで確かめていませんけど、あしからず。
seastar3さん
お礼が遅くなり、すみません。
datetime型に変更してみましたが、やはりうまくいかずでした。
>また、mysqlのinsert命令は、1文で一度に複数レコードを挿入できるようですから、insert命令の文字列の末尾に何か付いているのかもしれません。
こちらの対応もしてみました。この対応だけだったと思うのですが、うまくいくようになりました!
単純な登録だけと思っていたのですが、今回は色々と勉強になりました。
貴重なアドバイスありがとうございました!!大変助かりました。
No.4
- 回答日時:
いざとなったら・・・
最後に「delete from テーブル where name=''」などで
怪しいデータを削除しちゃうとか・・・
yambejpさん
お礼が遅くなってすみません。
アドバイスありがとうございました。
リアルタイムでデータを確認したいので、今回この方法は利用できませんでした。
No.2
- 回答日時:
''(空文字)!=NULL
ですよ。
フィールドの定義でNOT NULLを設定しても、''はNULLではないのでデータは追加されます。
insert test set name=NULL, mail=NULL, memo=NULL
ならデータは挿入されません。
この回答への補足
sql文を直接、コマンドで実行すると、正常に一行のみ挿入されました。
ちなみに、PC、モバイルとも同じ処理を行っているのですが、モバイルからの登録のみこの現象が確認されました。
kosukejlampnetさん
ご回答ありがとうございます。
name、mail、memoカラム全てアプリの方で、必ず文字列が格納されていることを確認してからの、DBへの登録になるのでNULLまたは、空文字で登録されることはないのですが、insert処理した後、空文字が自動的に挿入されてしまうのです。
No.1
- 回答日時:
こちらのいぞるでさんのブログの受け売りですが、
http://isoldeblog.blog93.fc2.com/blog-entry-14.h …
テーブル定義で updating フィールドに NOT NULL default CURRENT_TIMESTAMP を設定しておくと、レコード挿入後に自動的に新レコードを作ってしまうのかもしれません。
対応として、 on update CURRENT_TIMESTAMP を付け加えればいいのではないでしょうか。
検証なしですがあしからず。
この回答への補足
テーブル情報を下記に変更しても、自動的に新レコードが追加されてしまいます。
updating timestamp NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
seastar3 さん
ご回答ありがとうございました!
ご紹介頂いた方法で、新規データ作成しましたがやはり結果は同じでした。
でも、timestampについてとても勉強になりました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mysqlへのインポート処理がうま...
-
MySQLのLOAD DATA INFILEコマン...
-
接続ができません
-
ODP.NETのバージョン確認
-
MySQLカラム名は日本語と英数字...
-
副問合せにLIKE文を使う方法は...
-
VBAで変数内に保持された二次配...
-
エクセルで連勤チェックをした...
-
MySQLの型のサイズ指定で速度は...
-
mysqlコマンドにてタイムアウト
-
RPMのmysqlとmysql-serverの違い
-
プライマリーキーの昇順でソー...
-
オラクルのデータ型・通貨について
-
-3.34 が -3.3399999999999999 ...
-
SQL開発環境ソフトウェアである...
-
バッチファイルでTRUNCATE TABLE
-
postgreSQLのデータ型
-
mysqlでphpinfoと実際のバージ...
-
ヌル値は記憶容量を必要としな...
-
数字のカンマ区切りの文字列を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mysqlへのインポート処理がうま...
-
cseデータ閲覧時に文字化け
-
シングルクォーテーションとダ...
-
MAX()でENUMの内部番号が最大の...
-
mysqlをバックアップするツール...
-
MySQLに関して
-
Usage: \\.<filename> | sourc...
-
文字列分割して、ソート出来ま...
-
ERROR 1054 (42S22) 原因不明です
-
postgre ⇒ mysql にした場合...
-
mysqlコマンドでSQL文が実行で...
-
mysqlのmatch() against()で検...
-
MySQLのLOAD DATA INFILEコマン...
-
MySQLリファレンスマニュアル(...
-
mysql超初心者です。テーブルへ...
-
接続ができません
-
ODP.NETのバージョン確認
-
副問合せにLIKE文を使う方法は...
-
INT型は金額の型に使用するべき...
-
MySQLカラム名は日本語と英数字...
おすすめ情報