重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

質問させていただきます。

先日から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!と表示される)。

どうすればいいか教えていただければ幸いです。

A 回答 (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. …
    • good
    • 0

もし上記の$sqlをそのまま使っているようでしたら、


PHPとMySQLの文法上で問題があるかもしれません。

MySQLでは、クォートされていない文字列はカラム名だと認識されますので、その辺りでうまく変数が渡せていないように思います。

$sqlへの代入を以下のように修正してみたらどうなるでしょうか。

$sql = "INSERT INTO whatsnew(date,title,body) VALUES('".$ThisTime."','".$Title."','".$Body."');";
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

試してみましたが、やはりだめでした。SQL文が問題ではないということなんでしょうが・・・。

引き続きがんばって解決策を探しつつ、ここで解決策を募集しようと思います。。ありがとうございました。

お礼日時:2008/09/09 21:01

>Table 'xxxxxx.whatsnew' doesn't exist



そういうエラーがでるなら
xxxxxxというデータベースにwhatsnewというテーブルがないのでしょう?
質問者さんのデータベースがどうなっているか、私たちにはわかりませんので
適切なテーブル構成にしてくださいとしかいいようがないですが・・・・
    • good
    • 0
この回答へのお礼

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

とりあえずなんとかしようと思います。ありがとうございました。

お礼日時:2008/09/09 20:57

適当にテーブルを作成してテストしてみました。


-- 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以前の処理でエラーになっているのではないでしょうか?
    • good
    • 0
この回答へのお礼

わざわざテストまでして頂きありがとうございます。

先程No.2にも書きましたが確実にこの部分が原因でエラーとなっているようです。実際この部分を外すと正常に動作します。

もしかするとロリポップを利用しているのが関係しているのでしょうか・・・?

お礼日時:2008/09/08 21:44

予約語、フィールドの明示化、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());
で処理するのが効率的です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/08 21:38

echo $sql; とかで$sqlの内容を確認すればすぐに分かると思いますが...


$ThisTime、$Title、$Body の前後についている「.」は不要です。
    • good
    • 0
この回答へのお礼

迅速な回答ありがとうございます。

おっしゃられた通り、変数前後の「.」を削除、echo $sql;を行いました。
表示されたのは

INSERT Error!INSERT INTO whatsnew(date,title,body) VALUES('2008-09-07','ddd','ddd')

でした。これは正常にクエリが送信できている・・・わけではないと思うんですが、どうなんでしょうか。
あとついでに$bodyなどの前後のシングルクオートも消しましたが成功しませんでした。

お礼日時:2008/09/07 14:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!