みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2008-09-07 11:58:55

QNo.4310176

すぐに回答ほしいです

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

ずいぶん遅くなりましたが、解決しましたでしょうか?

もし解決していないようでしたら、
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

投稿日時 - 2008-09-18 13:20:34

ANo.6

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.5

もし上記の$sqlをそのまま使っているようでしたら、
PHPとMySQLの文法上で問題があるかもしれません。

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

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

$sql = "INSERT INTO whatsnew(date,title,body) VALUES('".$ThisTime."','".$Title."','".$Body."');";

投稿日時 - 2008-09-09 14:57:52

お礼

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

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

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

投稿日時 - 2008-09-09 21:01:06

ANo.4

>Table 'xxxxxx.whatsnew' doesn't exist

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

投稿日時 - 2008-09-08 21:58:01

お礼

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

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

投稿日時 - 2008-09-09 20:57:11

ANo.3

適当にテーブルを作成してテストしてみました。
-- 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以前の処理でエラーになっているのではないでしょうか?

投稿日時 - 2008-09-07 17:31:58

お礼

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

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

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

投稿日時 - 2008-09-08 21:44:19

ANo.2

予約語、フィールドの明示化、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());
で処理するのが効率的です。

投稿日時 - 2008-09-07 14:02:14

お礼

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

投稿日時 - 2008-09-08 21:38:53

ANo.1

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

投稿日時 - 2008-09-07 12:37:22

お礼

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

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

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

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

投稿日時 - 2008-09-07 14:10:02

あなたにオススメの質問