• ベストアンサー
  • すぐに回答を!

PHP+MySQLによるINSERTについて

質問させていただきます。 先日からPHPよりSQLテーブルへの値の追加を試しているのですが、なかなかうまくいきません。いろいろなサイトで資料を探しましたが、それでもできませんでした。 //問題個所 $sql = "INSERT INTO whatsnew(date,title,body) VALUES('.$ThisTime.','.$Title.','.$Body.')"; $result = mysql_query($sql); date、title、bodyは(dateも含め)すべてTEXTです。ちなみにエラーが出るのではなく、何事もなかったかのようになりました(直後にif(!$result){print 'INSERT Error!';}を挿入するとINSERT Error!と表示される)。 どうすればいいか教えていただければ幸いです。

共感・応援の気持ちを伝えよう!

  • 回答数6
  • 閲覧数3688
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.6

ずいぶん遅くなりましたが、解決しましたでしょうか? もし解決していないようでしたら、 create文を見せていただけたりしますか? symgtさんがおっしゃっている、 >mysql_query以前の処理でエラーになっているのではないでしょうか? というのは、もしかしたらデータ型だったりとかしませんか? create文で宣言した際、DATETIME、DATE、TIMESTAMPのどれを宣言したのか、 データテーブルに入れようとしている値とデータ型はマッチしているか、 そちらの検証はお済みでしょうか。 symgtさんの例だと、dateカラムのデータ型はDATETIMEですね。 symgtさんご自身で宣言してINSERTしているため、エラーはでません。 ↓↓ create table whatsnew ( date DATETIME NOT NULL, title varchar(64) NOT NULL, body varchar(64) NOT NULL );

参考URL:
http://dev.mysql.com/doc/refman/4.1/ja/datetime.html

共感・感謝の気持ちを伝えよう!

その他の回答 (5)

  • 回答No.5

もし上記の$sqlをそのまま使っているようでしたら、 PHPとMySQLの文法上で問題があるかもしれません。 MySQLでは、クォートされていない文字列はカラム名だと認識されますので、その辺りでうまく変数が渡せていないように思います。 $sqlへの代入を以下のように修正してみたらどうなるでしょうか。 $sql = "INSERT INTO whatsnew(date,title,body) VALUES('".$ThisTime."','".$Title."','".$Body."');";

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 試してみましたが、やはりだめでした。SQL文が問題ではないということなんでしょうが・・・。 引き続きがんばって解決策を探しつつ、ここで解決策を募集しようと思います。。ありがとうございました。

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

>Table 'xxxxxx.whatsnew' doesn't exist そういうエラーがでるなら xxxxxxというデータベースにwhatsnewというテーブルがないのでしょう? 質問者さんのデータベースがどうなっているか、私たちにはわかりませんので 適切なテーブル構成にしてくださいとしかいいようがないですが・・・・

共感・感謝の気持ちを伝えよう!

質問者からのお礼

そうですよねぇ・・・特に調べもせず質問して申し訳ありません。 ただPHPMyAdminなどを見るときちんとテーブルがありますし、そもそもデータを取り出すことはできているんです。 とりあえずなんとかしようと思います。ありがとうございました。

  • 回答No.3
  • symgt
  • ベストアンサー率56% (68/120)

適当にテーブルを作成してテストしてみました。 -- whatsnew table create table whatsnew ( date DATETIME NOT NULL, title varchar(64) NOT NULL, body varchar(64) NOT NULL ); // test.php <?php $link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); $db_selected = mysql_select_db('test'); $ThisTime = '2008-09-07'; $Title = 'Title'; $Body = 'Body'; $sql = "INSERT INTO whatsnew(date,title,body) VALUES('$ThisTime','$Title','$Body')"; echo "$sql\n"; // INSERT INTO whatsnew(date,title,body) VALUES('2008-09-07','Title','Body') $result = mysql_query($sql); if (!$result) { echo 'ERROR: ' . mysql_error(); } mysql_close($link); ?> 問題なくinsertできているのでsqlが間違っているわけではないようです。 mysql_query以前の処理でエラーになっているのではないでしょうか?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

わざわざテストまでして頂きありがとうございます。 先程No.2にも書きましたが確実にこの部分が原因でエラーとなっているようです。実際この部分を外すと正常に動作します。 もしかするとロリポップを利用しているのが関係しているのでしょうか・・・?

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

予約語、フィールドの明示化、PHPの変数の展開など理解があまいようです。 以下のいずれかで対応してみてください。 $sql = "INSERT INTO `whatsnew`(`date`,`title`,`body`) VALUES('{$ThisTime}','{$Title}','{$Body}')"; もしくは・・・ $sql = "INSERT INTO `whatsnew`(`date`,`title`,`body`) VALUES('".$ThisTime."','".$Title."','".$Body."')"; なおデバッグには $result = mysql_query($sql) or die(mysql_error()); で処理するのが効率的です。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

わざわざありがとうございます。確かに僕は勉強不足なのでこれからもっとがんばって勉強しようと思っています。 ですが「Table 'xxxxxx.whatsnew' doesn't exist」と出てやはり追加できませんでした。SQL文以外が間違っているのか・・・でもSELECTとかなら問題なく実行できるのですが・・・。

  • 回答No.1
  • symgt
  • ベストアンサー率56% (68/120)

echo $sql; とかで$sqlの内容を確認すればすぐに分かると思いますが... $ThisTime、$Title、$Body の前後についている「.」は不要です。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

迅速な回答ありがとうございます。 おっしゃられた通り、変数前後の「.」を削除、echo $sql;を行いました。 表示されたのは INSERT Error!INSERT INTO whatsnew(date,title,body) VALUES('2008-09-07','ddd','ddd') でした。これは正常にクエリが送信できている・・・わけではないと思うんですが、どうなんでしょうか。 あとついでに$bodyなどの前後のシングルクオートも消しましたが成功しませんでした。

関連するQ&A

  • mySQLでINSERT Errorとなります。

    初心者です。よろしくお願いいたします。 データを入れたいのですが、エラーとなってしまいます。 以下でデータベースとテーブルを作成し、 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } $sql = 'CREATE DATABASE tori'; if (mysql_query($sql, $db)) { echo "データベースtori の作成に成功しました\n"; } else { echo 'データベースtoriの作成に失敗しました: ' . mysql_error() . "\n";} mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $query ="create table {$tbl_name} ( id char(8) primary key, date TEXT, sex TEXT, age TEXT )TYPE=MyISAM"; mysql_query($query); $query ="INSERT INTO `houzingpark`.`hatogaya` ( id , date , sex , iro ) VALUES ( '2', 'uu', 'ii', 'po' )"; mysql_close($db); ?> 以下で入れ込みたいのですが、出来ないのです。 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $sql="INSERT INTO hatogaya ( id , date , sex , iro ) VALUES ( 3, 2005-12-3, mesu, cya )"; mysql_query($sql); if(!$result){print 'INSERT Error!';} echo $sql; mysql_close($db); ?> でINSERTしようとするのですが、INSERT Error!と表示されてしまいます。 Adminで見るとデータベースとテーブルは出来ているのですが、どうしてもINSERTできないのです。 もう何時間も悪戦苦闘しております。 どなたかご指導よろしくお願いいたします。

  • PHPとMySQLで文字化けします

    <?php $con=mysql_connect("localhost","oxwar2","chono3"); $db=mysql_select_db("oxwar2",$con); $query="insert into japan(id,title,price)values(1,'絵本',1000)"; $result=mysql_query($query,$con); if($result){ print "OK"; } ?> として、実行すると上手くいきますが、phpMyadminで見ますと、日本語の部分だけが文字化けしております。 これを直すにはどうしたらよいのでしょうか。 文字コードはUTF8で作りました。色々試しても同じです。 どのようにしたらよいのでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • phpからinsertできない

    またお世話になります。 PHPからMySQLへデータをインサートしたいのですが、各サイトを参考にしながら試しているのですがどうにも上手くいきません。 ソースを見ていただけますでしょうか? $con = mysql_connect("localhost","user","password") or die("MySQLに接続できません。"); mysql_select_db('test'); $sql = "SET CHARACTER SET UTF8"; $result = mysql_query($sql); $data1 = $HTTP_POST_VARS["inpdata1"]; $data2 = $HTTP_POST_VARS["inpdata2"]; $data3 = $HTTP_POST_VARS["inpdata3"]; $sql = 'INSERT INTO `tab1` (`abc`, `def`, `ghi`) VALUES (`$data1`,`$data2`,`$data3`);'; $result = mysql_query($sql); print $data1; //ここでは通常にデータが表示されるので print $data2; //データの受け渡しは問題ないはずですが。 print $data3; mysql_free_result($result); mysql_close($con);

    • ベストアンサー
    • MySQL
  • MySQL insertができない

    商品名とその値段を挿入しようとおもっているのですが、下記のようなエラーがでて先に進めずにいます。 Query failed: Unknown column 'item' in 'field list' <?php if($contact=mysql_connect("host","admin","root")){ echo "サーバに接続しました。<br>"; } mysql_select_db("watanabe", $contact); $query = 'INSERT INTO list(item,price) VALUES("りんご","100")'; $result = mysql_query($query) or die('Query failed: ' . mysql_error()); if($result){ echo"追加に成功しました。"; }else{ echo"追加に失敗しました。"; } ?> ご回答願えますでしょうか?

    • ベストアンサー
    • PHP
  • insertがうまくいかない

    PHP5+MYSQLの環境で $sql_str = "INSERT INTO bbs(userid,toukouid,groupid,title,memo) VALUES('$name','$toukouid','$group','$title','$memo')"; mysql_query($sql_str, $con_id); を実行しますが、登録ができません。 mysql_queryの結果がfalseです・・・。 ちなみに変数は全て1が代入しています。 悪いところあれば指摘お願いいたします。 また、他の情報が必要であればもうしつけください。

    • 締切済み
    • PHP
  • PHP insert文内での、変数の記述の仕方

    for($cnt = 1; $cnt <= 11; $cnt++){ $sql3 = "insert into Shizai (ShiNo,ShiHin) values ('" . $cnt . "','" . $_POST['ShiHin.$cnt.'] . "')"; print $sql3; $result3 = mysql_query($sql3,$link) ; } としたい場合、$_POST['ShiHin.$cnt.']の箇所はどう書いたら良いのでしょうか? $_POST['ShiHin.$cnt.']でも$_POST['ShiHin$cnt']でも値を拾いませんでした。 基本的な事で申し訳ございませんが、ご教授願えますでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • insert文等で「`」の有無で失敗するテーブルとしないテーブルがある。

    XAMPP(winXP、PHP4)を使っています。 Aのテーブルでは $query= "insert into table (a,b,c,d) values('1','2','3','4')"; $result = mysql_query($query); でデータが追加されるのに、Bのテーブルでは失敗しました。 今日ずっと何が間違っているのかわからなかったのdですが、 $query= "insert into table (`a`,`b`,`c`,`d`) values('1','2','3','4')"; $result = mysql_query($query); とすると成功しました。 なぜAのテーブルでは「`」が無くても成功したのに、Bのテーブルでは必要なのでしょうか。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • php mysqlについて

    初心者です宜しくお願いします。 phpからデータベースを使いたいのですが(mysql)、mysql_query()関数のところで1366エラーが出ます。 半角英数ならエラーは出ません。 プログラムを貼り付けます。どなたかお願いします、説明をもっと書きたいのですが私もあまりわかってないのでどうもすみません。 今やっていることは全てローカルですwindowsを使ってます、文字コードもshift_jisです。phpもmysqlも一台のコンピュータでやっています。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>MySQLへデータを登録</title> </head> <body> DBとの連携テスト結果<br> <?php // DBに接続 if(!$con=mysql_connect("localhost","root","y3kwyuba")){ echo"connect_error"; exit; } // DBを選択 if(!mysql_select_db("test",$con)){ echo"select_db_error"; exit; } //MySQL4.1への対応 //mysql_query("SET NAMES SJIS"); この上の行のコメントをはずすとうまく動くのですが色々調べましたら、この書き方は推奨されないと書いてありました、他に対策はあるのでしょうか? $name = $_POST['nm']; $age = $_POST['age']; // フォームで送られてきたデータでINSERT文を作成 $sql = "insert into t_touroku(name,age) values('$name',$age)"; // SQLを実行 if(!$res=mysql_query($sql,$con)){ echo"query_error"; echo "エラー番号:".mysql_errno(), #エラー番号 "メッセージ:".mysql_error(); #エラーメッセージ exit; } // DBから切断 mysql_close($con); // メッセージ出力 echo"登録完了"; ?> </body> </html> 宜しくお願いします。

    • ベストアンサー
    • PHP
  • CakePHPとMySqlを使用しています。INSERTしたあと、id

    CakePHPとMySqlを使用しています。INSERTしたあと、idを取得する方法について教えて頂きたいです。 データをINSERTとSELECTをする関数を作成し、 メインの関数でINSERTとSELECTをする関数を呼び出すと、idがNULLとなってしまいます。 しかし、1つの関数でINSERTとSELECTを行うとidを取得する事ができました。 この方法は問題ないのでしょうか? この方法だとなぜidが取得できるんでしょうか? また、これ以外の方法でidを取得できる方法があればお教え頂きたいです。 宜しくお願いします。 【hogeテーブル】 id(PRIMARY。オートインクリメントさせています) name ●idがNULLになる方法 function main() { $this->insertHoge(); $id = $this->getHoge(); ←結果がNULLになる } function insertHoge() { $sql = "INSERT INTO hoge ('name') VALUES('ABC')"; $result = $this->query($sql); return $result; } function getHoge() { $sql = "SELECT id FROM hoge WHERE name='ABC'"; $result = $this->query($sql); return $result; } ●idが取得できる方法 function main() { $id = $this->insertHoge(); ←idがかえってくる } function insertHoge() { $sql = "INSERT INTO hoge ('name') VALUES('ABC')"; $result = $this->query($_sql); $sql = "SELECT id FROM hoge WHERE name='ABC'"; $result = $this->query($_sql); return $result; }

    • 締切済み
    • PHP
  • mysqlデータベースにinsertできない

    こんにちは。 現在、perlでmysqlにデータをinsertしているのですが、ある記号があった場合、挿入することが出来ません。 以下のようにしたところ、もし$titleや$komentoに「'」があった場合、insert文のシングルクオートと引っかかってるみたいです。 $dbh->do(qq|insert into suredo values ('$no','$title','$koment')|); そこで、今度は $dbh->do(qq|insert into suredo values ("$no","$title","$koment")|); とした場合、今度は「"」があった場合ダメみたいです。 このような場合、「’」や「”」があってもinsertできる様にするにはどのようにしたらよろしいのでしょうか? どのたかよろしくお願いします。

    • ベストアンサー
    • Perl