- 締切済み
データベースが更新されない
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) と出て空の状態です。何故でしょうか・・・。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- chukenkenkou
- ベストアンサー率43% (833/1926)
>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文のように指定する方法があります。
- chukenkenkou
- ベストアンサー率43% (833/1926)
>エラーもなく エラーを拾えていないのでは? >mysql_query("INSERT INTO sample4 (id,name,age,gender) VALUES ('田中',18,1)", $conn); 列数と値数が合っていないので、MySQLからエラーが返されているはずです。
補足
idの値も入力したら空ではなくなりましたが、名前の部分が??になっていました。 それと、idはauto_incrementにしてあるのに、何故idの値も入力しておかないとemptyだったんでしょうか。
- yambejp
- ベストアンサー率51% (3827/7415)
>mysql_select_db("sample4", $conn); これはsample4データベースにアクセスしていますが >mysql_query("INSERT INTO sample4 ・・・ のところはsample4テーブルにアクセスしています。 きちんとsample4データベースの中にsample4テーブルがありますか? なにか混同しているような表記にみえますが
お礼
それから、wwwフォルダの中にtestフォルダを作ってそこにphpを保存しているんですが、 $conn = mysql_connect("localhost"・・・ であってるんでしょうか。
補足
間違えていました。 sample4データベースの中にsamplet4テーブルを作っていたので mysql_query("INSERT INTO samplet4・・・ に直したんですが、同じように空の状態でした。
お礼
すいません。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になっています・・・。
補足
有り難うございます。idの方はうまくできました。 VertrigoServを使っています。色々と調べたんですが、結局MySQLだけを用いたinsertからのselectによる要素の表示は日本語でも表示されたんですが、PHPから操作すると日本語の部分が「??」となってしまいます。 statueで調べたところMySQLの文字コードはsjisでした。