- ベストアンサー
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)
- 専門家の回答
質問者が選んだベストアンサー
ずいぶん遅くなりましたが、解決しましたでしょうか? もし解決していないようでしたら、 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 );
その他の回答 (5)
- sightoo
- ベストアンサー率0% (0/1)
もし上記の$sqlをそのまま使っているようでしたら、 PHPとMySQLの文法上で問題があるかもしれません。 MySQLでは、クォートされていない文字列はカラム名だと認識されますので、その辺りでうまく変数が渡せていないように思います。 $sqlへの代入を以下のように修正してみたらどうなるでしょうか。 $sql = "INSERT INTO whatsnew(date,title,body) VALUES('".$ThisTime."','".$Title."','".$Body."');";
- yambejp
- ベストアンサー率51% (3827/7415)
>Table 'xxxxxx.whatsnew' doesn't exist そういうエラーがでるなら xxxxxxというデータベースにwhatsnewというテーブルがないのでしょう? 質問者さんのデータベースがどうなっているか、私たちにはわかりませんので 適切なテーブル構成にしてくださいとしかいいようがないですが・・・・
お礼
そうですよねぇ・・・特に調べもせず質問して申し訳ありません。 ただPHPMyAdminなどを見るときちんとテーブルがありますし、そもそもデータを取り出すことはできているんです。 とりあえずなんとかしようと思います。ありがとうございました。
- 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にも書きましたが確実にこの部分が原因でエラーとなっているようです。実際この部分を外すと正常に動作します。 もしかするとロリポップを利用しているのが関係しているのでしょうか・・・?
- 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とかなら問題なく実行できるのですが・・・。
- 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などの前後のシングルクオートも消しましたが成功しませんでした。
お礼
回答ありがとうございます。 試してみましたが、やはりだめでした。SQL文が問題ではないということなんでしょうが・・・。 引き続きがんばって解決策を探しつつ、ここで解決策を募集しようと思います。。ありがとうございました。