MySQLで挿入できないです(PHPとの連携)

---まず最初に---
以前、IDというint(5)のフィールドがあるテーブルの時は問題なく動作していました。
IDをプライマリキーにして、他にtext型のフィールドがありました。
※この時はIDフィールドにレコードを入れてからtextフィールドにレコードを入れてました。
--------------------------------------------------
でも、今回のテーブルにはIDとかないんです。
text型のフィールドが二つあって、そこに
「あああああ」「いいいいい」とかの文字を入れたいのです。
でも、いきなりtext型のフィールドに「あああああ」を入れようとしてもなぜか何も入りません。
なぜか、int型のフィールドなら、普通に動作するみたいです。

foreachで配列の数だけtextフィールドに挿入するんですが。以前は普通にできてたんです。でも、今回はいきなりtext型のフィールドに「あああああ」を入れることができません。
上手くいかない理由がわからないので、
解決法をご教授頂けませんでしょうか??

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/08/18 11:27:33
  • 終了:2011/08/18 13:43:03

ベストアンサー

id:taknt No.2

きゃづみぃ回答回数13539ベストアンサー獲得回数11982011/08/18 13:03:52

ポイント50pt

($test)";

じゃなくて

('$test')";

というように 文字列は '' でくるまないとダメなんじゃないのかな?

id:ty2016

ご回答ありがとう御座います。無事、解決致しました。

くだらないミスを犯していたようです。

2011/08/18 13:44:59

その他の回答(1件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492011/08/18 11:49:42

ポイント50pt

想像ですが以前は下記のような具合に挿入処理+更新処理の手順だったのではないでしょうか?

# IDフィールドにレコードを入れてから
INSERT INTO テーブル名 (IDフィールド名) VALUES (数値);
# textフィールドにレコードを入れてました
UPDATE テーブル名 SET テキストフィールド名 = '文字列' WHERE IDフィールド名 = 数値;

そして今回は下記のようにいきなり更新処理だけを行っているのでは?

# textフィールドにレコードを入れてました
UPDATE テーブル名 SET テキストフィールド名 = '文字列' WHERE IDフィールド名 = 数値;

 

もしも上記の推測が正しければ下記のように挿入処理を行うようにするだけの話となりますが、さて、この推測は正しいかどうか・・・

# textフィールドにレコードを入れる
INSERT INTO テーブル名 (テキストフィールド名, テキストフィールド名) VALUES ('あああああ','いいいいい');

 

余談

テキストフィールド名の部分にMySQLの予約語が含まれていたりする場合にはバッククォート(日本語キーボードならば @ の上にあります)で囲む

# textフィールドにレコードを入れる
INSERT INTO テーブル名 (`テキストフィールド名`, `テキストフィールド名`) VALUES ('文字列','文字列');
id:ty2016

コードはこれですね。出来たてのテーブル(textフィールド二つで、照合順序をutf8generalciにしただけで何もいじってません)

下記を$test="1"; に変えると正常にinsertされるみたいです。数字だとなぜかできるんです。

また、phpmyadminから挿入すると、正常に動作します。

-------------------------------------------------

$test="test";

mysql_connect( $hostname, $uname, $upass);

mysql_select_db($dbname);

$sql="INSERT INTO tag (tag) VALUES ($test)";

mysql_query("SET NAMES utf8");

mysql_query($sql);

-------------------------------------------------

2011/08/18 12:54:34
id:taknt No.2

きゃづみぃ回答回数13539ベストアンサー獲得回数11982011/08/18 13:03:52ここでベストアンサー

ポイント50pt

($test)";

じゃなくて

('$test')";

というように 文字列は '' でくるまないとダメなんじゃないのかな?

id:ty2016

ご回答ありがとう御座います。無事、解決致しました。

くだらないミスを犯していたようです。

2011/08/18 13:44:59
  • id:ty2016
    コードはこれですね。出来たてのテーブル(textフィールド二つで、照合順序をutf8generalciにしただけで何もいじってません)
    下記を$test="1"; に変えると正常にinsertされるみたいです。数字だとなぜかできるんです。
    -------------------------------------------------
    $test="test";
    mysql_connect( $hostname, $uname, $upass);
    mysql_select_db($dbname);
    $sql="INSERT INTO tag (tag) VALUES ($test)";
    mysql_query("SET NAMES utf8");
    mysql_query($sql);
    -------------------------------------------------
  • id:windofjuly
    うぃんど 2011/08/18 13:25:15
    コメント欄に書けば全回答者にメール通知が来ますので、回答欄にコピペ投稿しなくてもOKですよ
     
    さて、コードが明らかになった時点で既に回答がついてますが、
    文字列はシングルクォートで括らないといけないので下記のようになりますね
    $sql="INSERT INTO tag (tag) VALUES ('$test')";
    (最初からコード書いてもらえれば二度手間なくて互いに楽でした。次回があればよろしくです)
     
    余談
    >foreachで配列の数だけtextフィールドに挿入する
    foreachで何度もMySQLにINSERT INTOを実行させるのではなく、
    foreachで下記のようなSQLを作成してMySQLに実行させれば、MySQLとのやりとりが一回ですむので処理が早くなります
    INSERT INTO tag (tag) VALUES ('aaaa'),('bbbb'),('cccc');
  • id:ty2016
    便利メモ:
    下記の場合はforeachで連結代入の「.=」を使用し繋げていく。
    また、連結の最後に「,」が一つ余計に生成されるため「rtrim」で除去します。

    >foreachで下記のようなSQLを作成してMySQLに実行させれば、MySQLとのやりとりが一回ですむので処理が早くなります
    INSERT INTO tag (tag) VALUES ('aaaa'),('bbbb'),('cccc');規約違反として通知

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません