• 締切済み

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

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) と出て空の状態です。何故でしょうか・・・。 よろしくお願いします。

noname#103047
noname#103047
  • MySQL
  • 回答数3
  • ありがとう数3

みんなの回答

回答No.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文のように指定する方法があります。

noname#103047
質問者

お礼

すいません。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になっています・・・。

noname#103047
質問者

補足

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

回答No.2

>エラーもなく エラーを拾えていないのでは? >mysql_query("INSERT INTO sample4 (id,name,age,gender) VALUES ('田中',18,1)", $conn); 列数と値数が合っていないので、MySQLからエラーが返されているはずです。

noname#103047
質問者

補足

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

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>mysql_select_db("sample4", $conn); これはsample4データベースにアクセスしていますが >mysql_query("INSERT INTO sample4 ・・・ のところはsample4テーブルにアクセスしています。 きちんとsample4データベースの中にsample4テーブルがありますか? なにか混同しているような表記にみえますが

noname#103047
質問者

お礼

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

noname#103047
質問者

補足

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

関連するQ&A

  • PHP と Mysql の連携時に発生する漢字の文字化け

    宜しくお願いします。 1.PHPプログラムからMYSQLにデータを書き込んだ際、結果をコマンドプロンプトで見ると漢字が文字化けしてしまいます。 2.また、コマンドプロンプトから直接同じ命令を打ち込んだ場合は、漢字の値だけがテーブルに挿入(insert)されません。または、結果は挿入されているが、表示されていないだけだという可能性もあります。  しかし、結果をphpMyAdminから見ると、前者は期待通りの値、つまり漢字が挿入されているようです。後者は、phpMyAdminから見ても相変わらず、何も挿入されていないように見えます。  文字コード設定は、utf8にしました(画像添付)。  この問題にはとても手こずっています。昨日一日をこの問題のために費やし、今日も潰れそうです。しかし、どうしても途中放棄したくありませんので、お力を貸し頂けないでしょうか。  説明不足な点がございましたら、どんどん補足説明を要求してください。以下に保持している情報・状況をできるだけ詳しく書かせていただきました。重複する部分もあるかもしれませんが、その点はお許しください。ご回答をお願いします・・・。 <<PHPプログラムソース>> このプログラムは、phpユーザ,passパスワードでlocalhostにアクセスし、php_sample_databaseデータベースに接続後、カラム(id<primary key>)と(name)からなるテーブルを作成します。その後、作成したテーブルに漢字を含む値を入力します。今回発生している問題は、この処理に際して生じていると思われる「漢字の文字化け」です。 <?php $createGender = <<<DDL create table gender (id int primary key, name varchar(32) ) DDL; $conn = mysql_connect("localhost","root","pass"); mysql_query("set names 'utf8'",$conn); echo "SET NAMES utf8★" . mysql_client_encoding(). "<br>"; mysql_set_charset("utf8",$conn); echo "mysql_set_charset★" . mysql_client_encoding() . "<br>"; #上は、クライアント文字コードの実験 mysql_select_db("php_sample_database",$conn); mysql_query($createGender,$conn); mysql_query("insert into gender (id, name) values (1,'男性')",$conn); mysql_query("insert into gender (id, name) values (2,'女性')",$conn); mysql_close($conn); echo '初期化終了<br>'; ?> <<PHPプログラムの実行結果―ブラウザ画面>> SET NAMES utf8★latin1 mysql_set_charset★utf8 初期化終了 ※ブラウザは正常に表示されます。文字化けはありません。 <<PHPプログラムの実行結果―コマンドプロンプト画面>> ※詳細は、画像を添付させていただきます。 --------- id |name --------- 1 |漢字の文字化け 2 |漢字の文字化け --------- <<PHPプログラムの実行結果―phpMyAdmin画面>> 画像の左側に添付させていただきました。 <<コマンドプロンプトで実行した結果>> ※PHPと全く同じ命令のうち、テーブル作成に関する部分のみをコマンドプロンプトから入力した結果・・・下図のようにname欄が空白になりました。つまり、漢字部分だけが表示されなかったことになります。 --------- id |name --------- 1 | 2 | --------- <<コマンドプロンプトで実行した結果―phpMyAdmin画面>> 画像の左側に添付させていただきました。 <<使用している環境・バージョン情報>> OS:Windows vista Home premium xampp:1.6.8 apache:2.2.9 mysql:5.0.67-community-nt phpmyadmin:2.11.9.2 php:5.2.6 申し遅れましたが、私は、PHPとMYSQLをセットで勉強し始めたばかりのひよっこです。 長くなってしまい、申し訳ありません。どうぞ宜しくお願い致します。

    • ベストアンサー
    • PHP
  • トランザクションが効かない

    PHPでMySQLをやっています。 異なる2つのテーブルに同時にinsertをしようと思い、transactionを使って 片方がエラーならどちらにもinsertしないこと期待したのですが、 どうも効いてないみたいなんです・・・ mysql_query("begin transaction;") or $errStr= mysql_errno() . ": " . mysql_error(). "\n"; $sqlstr = "INSERT INTO table1 (id, name) VALUES ("aaaa", "山田");"; mysql_query($sqlstr) or $errStr= mysql_errno() . ": " . mysql_error(). "\n"; $sqlstr = "INSERT INTO table2 (id, name) VALUES ("bbbb", "佐藤");"; mysql_query($sqlstr) or $errStr= mysql_errno() . ": " . mysql_error(). "\n"; mysql_query("commit transaction;") or $errStr= mysql_errno() . ": " . mysql_error(). "\n"; ※table1には既に「id:aaaa name:鈴木」が入っています を実行して重複エラー 「1062: Duplicate entry 'aaaa' for key 1 」 が出たのですが、table2には「id:bbbb name:佐藤」が入ってしまいます。 もちろんtable1には「id:aaaa name:山田」は入りません。 どうすればトランザクションが効くようになるのでしょうか?

    • ベストアンサー
    • MySQL
  • 持続的データベース接続について

    はじめまして 現在、phpでMySQLに接続して、テーブルのデータを表示しているのですが、ページが切り替わった時に前のページで使用されていたテンポラリテーブルの内容を再利用したいのですが、セッション管理を維持する方法が、よくわかりません。 php初心者のため、どなたか力を貸してください! 例えば、下記のようなphpからtest.phpにページ移動する際にtestテーブルの内容をtest.phpでselectしたいのですが、セッションを維持するにはどのような記述をすれば、よいのでしょうか? お手数ですが、宜しくお願いします! <?php /* データベース接続 */ $host = "localhost"; if (!$conn = mysql_connect($host, "user", "passwd")){ die("MySQL接続エラー.<br />"); } mysql_select_db("dwhdb", $conn); create temporary table test(name varchar(30),data varchar(30)); $sql = "insert into test(name,data) values("tanaka","xxxxx"); $res = mysql_query($sql,$conn); print("<a href='test.php'>next</a>"); ?>

    • 締切済み
    • PHP
  • MYSQLに更新日を自動的に挿入

    PHPとMYSQLで会員制のページを作っています。 更新した時、自動的に日付を入れようしていますがうまく出来ません、 何方か教えていただけませんか。。 よろしくお願いいたします。 下記のようにしています。 MYSQL table mem id int(10) name vacher(100) pass varcher(8) regdate date PHP $sql = "insert into mem (id , name , pass ,regdate) values (\"id\", \"$name\", \"$pass\", date())";

    • ベストアンサー
    • PHP
  • 何故、mysql_insert_id が not a valid になるのでしょうか?  

    MySQLバージョン サーバ5.0.45、 クライアント 3.23.49 Apache2.0.61 (Win32) PHP4.4.7 の環境下で、 名称 member, id int(10) unsigned not null auto_increment、 name, varchar(20) not null, mail varchar(30) not null のテーブルを作りました。          次のスクリプトを書いて <?php session_start(); $name = $_POST["name"]; $mail = $_POST["mail"]; print_r($_POST); $conn = mysql_pconnect("localhost", "ABC", "XYZ") or die("Can't connect"); mysql_select_db("SIMEI", $conn) or die("db error") ; $query = "INSERT INTO member (name, mail) VALUES ('$name','$mail')"; $result = mysql_query($query, $conn); //$oid = 'mysql_insert_id($result)'; //''で括ってみる $oid = mysql_insert_id($result); // ← 11行 $result = mysql_query( "SELECT id FROM member WHERE oid = $oid", $conn); if($result){ print("insert OK");}  echo "Can't insert "; $_SESSION['id'] = mysql_result($result, 0); // ← 14行 mysql_close($conn); ?> これを実行すると、 データはmysql DB に登録されますが、下記のエラーが出て、id を取得できません。 何故でしょうか? どうすれば不具合を解決することができるでしょうか? Warning: mysql_insert_id(): supplied argument is not a valid MySQL-Link resource in C:\・・・・\insert.php on line 11 Warning: mysql_result(): supplied argument is not a valid MySQL result resource in C:\・・・・・\insert.php on line 14

    • ベストアンサー
    • MySQL
  • MySQLで漢字を登録したい。

    MySQLで漢字を登録したい。 insert into personal(id, old, name) values(1, 18, 'Satou'); とやればうまくいくのですが、 insert into personal(id, old, name) values(1, 18, '佐藤'); とやっても????となってしまいます。 どのようにすればいいでしょうか。

    • ベストアンサー
    • MySQL
  • PHPで空の値を表示させたくない場合

    PHPでデータベースから値を取り出し 出力させるというスプリクトを作成してるのですが どうしても、入力フォームに空を値を 入れても空の値まで出力されてしまいます こういう場合はどうやって空の値を 弾くコードを書けばいいのか教えて もらえないでしょうか? ちなみに自分が書いたコードはこれです <?php $conn=mysql_connect("localhost", "username", "pass"); if (!$conn) { die('接続失敗です。'.mysql_error()); } mysql_select_db("database", $conn); mysql_query("SET NAMES 'ja-utf8'", $conn); mysql_query("INSERT INTO tablename (caram) VALUES ('$title_a')", $conn); $sql='SELECT title FROM tablename'; $rs=mysql_query($sql, $conn); $res=mysql_fetch_assoc($rs); if (isset($res)) { while ($res=mysql_fetch_assoc($rs)) { echo "<br>"; echo htmlspecialchars($res["caram"], ENT_QUOTES); } } else { echo ""; } mysql_close($conn); ?> どなたかよろしくお願いします。

    • ベストアンサー
    • PHP
  • "と'の使い方を教えていただけないでしょうか

    お世話になります。 "と'の使い方で悩んでおります。 POSTでname="a"のINPUTBOXからデータを送信し、それをPHPで受けて、MySQLのテーブルのカラムに挿入するスクリプトで悩んでいます。 次のようにすると、うまく動作します。 mysql_query("INSERT INTO tb VALUES ('$_POST[a]')"); あるいは $b=$_POST[a];や$b=$_POST['a'];や$b=$_POST["a"];で mysql_query("INSERT INTO tb VALUES ('$b')"); 次のようにすると、失敗します。 mysql_query('INSERT INTO tb VALUES ("$_POST[a]")'); あるいは $b=$_POST["a"];などで mysql_query('INSERT INTO tb VALUES ("$b")'); これは私の環境だけで起こることなのでしょうか。 むしろ' 'で囲うと、文字そのものが展開されるので"$_POST[a]"としなければいけないと思うのですが。いかがでしょうか。 また、そもそも$_POST[a]で受け取るときに添字にクォーテーションはつけなくてもよいのでしょうか。 どなたか、お教えいただけないでしょうか。あるいはヒントだけでも助かります。 どうか、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpでデーターベース編集

    phpを独学し始めた初心者です。 よろしくお願いします。 以下のphpファイルを実行すると エラーが出ないにもかかわらず、 データーベースの表示で確認すると 『item_name』に『もも』という文字が入っていません。 その他はphp通りデーターが挿入されます。 なぜでしょうか? (環境)------------------------------------- phpエディターでphpファイルをつくり phpMyAdminでデーターベースを編集してます。 ローカルホストです。 --------------------------------------------- <?php mysql_connect('localhost', 'root', '') or die(mysql_error()); mysql_select_db('mydb') or die(mysql_error()); mysql_query('SET NAMES UTF8'); mysql_query ('INSERT INTO my_items SET maker_id=1, item_name="もも", price=480, keyword="缶詰,ピンク,甘い", sales=0, created="2010-10-10", modified="2012-05-05"') or die(mysql_error()); echo 'データー挿入完了'; ?> どうぞよろしくお願いします。

  • phpでのSQLでのデータの追加方法

    phpでのSQL実行に関して、下記のデータを追加するコードがあります。 mysql_query('INSERT INTO my_items SET maker_id=1, item_name="もも", price=210, keyword="缶詰,ピンク,甘い", sales=0, created="2010-08-01", modified="2010-08-01"') or die(mysql_error()); echo 'データを挿入しました'; 私は。それを INSERT INTO (フィールド名) VALUES(値) のSQL文で実行したいのですが、その方法が分かりません。 よろしければ、それを実行するコードを教えてください。お願いします。

    • ベストアンサー
    • PHP