みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

データベースが更新されない

MySQLを使ってフィールドにid、name、age、genderを持つデータベースを作りました。idは、主キーでauto_incrementです。中身は空です。
ここにPHPで
<?php

$conn = mysql_connect("localhost", "user", "pass")
or die("MySQLに接続できません");
mysql_query("SET NAMES 'sjis'", $conn);

mysql_select_db("sample4", $conn);

mysql_query("INSERT INTO sample4 (id,name,age,gender) VALUES ('田中',18,1)", $conn);
mysql_query("INSERT INTO sample4 (id,name,age,gender) VALUES ('鈴木',24,1)", $conn);
mysql_query("INSERT INTO sample4 (id,name,age,gender) VALUES ('加藤',20,0)", $conn);
mysql_close($conn);

echo "初期化終了<BR>";

?>
をブラウザ上で実行したんですが、MySQLには接続でき、エラーもなく初期化完了とは出るんですが、MySQLで中身を確認してみると、
mysql> select * from samplet4;
Empty set (0.00 sec)
と出て空の状態です。何故でしょうか・・・。
よろしくお願いします。

投稿日時 - 2010-01-18 22:03:30

QNo.5603800

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>idの値も入力したら空ではなくなりましたが、名前の部分が??になっていました。

文字コードの設定は、どうなっていますか?

>それと、idはauto_incrementにしてあるのに、何故idの値も入力しておかないとemptyだったんでしょうか。

auto_incrementを利用するには、null か 0を値として指定するか、値を格納しない方法になります。

今回の例では、

INSERT INTO sample4 (id,name,age,gender) VALUES (null,'加藤',20,0)

のように、id列にnullか0を指定するか、

INSERT INTO sample4 (name,age,gender) VALUES ('加藤',20,0)

のように、id列に値を入れないかです。

insert into 表名(列名リスト) values(値リスト)

の構文では、列名リストと値リストは、指定順に列と値が対応付けられるので、当然、個数が一致している必要があり、一致していない場合は、MySQLからエラーで返ります。

insert into 表名 values(値リスト)

と列名リストを省略した場合は、表のすべての列が指定されたと解釈され、値リストはすべての列分必要です。

MySQLでは、独自仕様として、

insert into 表名 set 列名=値[,・・・・]

といった、列名と値の対応付けをupdate文のように指定する方法があります。

投稿日時 - 2010-01-19 00:29:41

補足

有り難うございます。idの方はうまくできました。
VertrigoServを使っています。色々と調べたんですが、結局MySQLだけを用いたinsertからのselectによる要素の表示は日本語でも表示されたんですが、PHPから操作すると日本語の部分が「??」となってしまいます。
statueで調べたところMySQLの文字コードはsjisでした。

投稿日時 - 2010-01-19 00:33:18

お礼

すいません。show variables like 'character_set%';
で調べたところ、
| character_set_client | utf8
|
| character_set_connection | utf8
|
| character_set_database | latin1
|
| character_set_filesystem | binary
|
| character_set_results | utf8
|
| character_set_server | utf8
|
| character_set_system | utf8
|
となっていました。何故かデータベースだけlatin1になっています・・・。

投稿日時 - 2010-01-19 01:02:55

ANo.2

>エラーもなく

エラーを拾えていないのでは?

>mysql_query("INSERT INTO sample4 (id,name,age,gender) VALUES ('田中',18,1)", $conn);

列数と値数が合っていないので、MySQLからエラーが返されているはずです。

投稿日時 - 2010-01-18 23:17:42

補足

idの値も入力したら空ではなくなりましたが、名前の部分が??になっていました。
それと、idはauto_incrementにしてあるのに、何故idの値も入力しておかないとemptyだったんでしょうか。

投稿日時 - 2010-01-18 23:28:29

ANo.1

>mysql_select_db("sample4", $conn);

これはsample4データベースにアクセスしていますが

>mysql_query("INSERT INTO sample4 ・・・

のところはsample4テーブルにアクセスしています。

きちんとsample4データベースの中にsample4テーブルがありますか?
なにか混同しているような表記にみえますが

投稿日時 - 2010-01-18 22:49:59

補足

間違えていました。
sample4データベースの中にsamplet4テーブルを作っていたので
mysql_query("INSERT INTO samplet4・・・
に直したんですが、同じように空の状態でした。

投稿日時 - 2010-01-18 22:52:30

お礼

それから、wwwフォルダの中にtestフォルダを作ってそこにphpを保存しているんですが、
$conn = mysql_connect("localhost"・・・
であってるんでしょうか。

投稿日時 - 2010-01-18 23:03:35

あなたにオススメの質問