アプリ版:「スタンプのみでお礼する」機能のリリースについて

mysql4.0.20を使用しています、データの中にセミコロンを入れたいのですが、セミコロンをSQL文の終了と判断?されるため、うまくいきません。
たとえば以下のようなSQLにて
replace into tableA set columA='data1;data2', columB='data';
data1とdata2の間のセミコロンでおこられるのですが、どなたか、mysqlにて
データとしてセミコロンを入力する方法を教えていただけないでしょうか?

A 回答 (6件)

ham_kamoです。


以下のソースで試したところ、エラーになりませんでした。

<?php
$con = mysql_connect("localhost","user1","");
mysql_select_db("test");
$hoge = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)";
mysql_query(sprintf("replace into tableA set hoge='%s';",$hoge));
mysql_close($con);
?>

実行結果
mysql> select * from tableA;
+-----------------------------------------------------------------------+
| hoge |
+-----------------------------------------------------------------------+
| Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) |
+-----------------------------------------------------------------------+
1 row in set (0.00 sec)

$hoge = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)";

$hoge = getenv('HTTP_USER_AGENT');
に変えても同じくエラーにはならずにレコードが挿入されました。

すみません、こちらの環境で再現しないので私もちょっとお手上げです。
バージョンの違いによるものなのかな…。
お力になれずすみません。他に詳しい方がフォローしてくれるといいのですが。
    • good
    • 0

$hoge = "testdata1; testdata2; testdata3";


mysql_query(sprintf("replace into tableA set hoge='%s';",$hoge));

特におかしくはないですね…。
試しに自分の環境で同じ名前のテーブルを作ってPHPから上のコードを実行したら、エラーにならずにちゃんとレコードが追加されました。

mysql> select * from tableA;
+---------------------------------+
| hoge |
+---------------------------------+
| testdata1; testdata2; testdata3 |
+---------------------------------+
1 row in set (0.00 sec)

testdata1やtestdata2の部分の文字列には、実際には'(シングルクオート)が含まれていたりしませんか?

この回答への補足

ham_kamoさんありがとうございます。
実際のtestdata1やtestdata2の部分は
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)
な感じのデータです。USERAGENTをデータベースに突っ込もうとすると
USERAGENTの;の部分でエラーが出てreplaceできませんでした。

補足日時:2006/12/14 10:43
    • good
    • 0

No.1です。

補足拝見しました。
> ・phpスクリプトにてSQL文作成replace文実行
そのSQL作成のコードを記載していただければ、具体的に何かわかるかもしれないので、補足願えないでしょうか。

No.2の方への補足にある、
> Check the manual that corresponds to your MySQL server version for the right syntax to use near 'data2'' at line 1
において、data2の後ろにシングルクオートが2つついているのが気になります。やはりクオートがらみのような気がするのですが。

この回答への補足

ham_kamoさんありがとうございます。
>そのSQL作成のコードを記載していただければ、具体的に何かわかるかもしれないので、補足願えないでしょうか。

$hoge = "testdata1; testdata2; testdata3";
mysql_query(sprintf("replace into tableA set hoge='%s';",$hoge));
こんな感じです。

補足日時:2006/12/11 11:18
    • good
    • 0

参考までに。


phpMyAdminは日本語対応です。
    • good
    • 0

MySQL 5.0のcommand line clientでは、問題なく実行できました。



>data1とdata2の間のセミコロンでおこられる

具体的に、どんなエラーになるのですか?
    • good
    • 0
この回答へのお礼

chukenkenkouさん、回答ありがとうございました。
コマンドラインで実行したところ、実行できました。
phpスクリプトを組んで、cronで自動実行していたのですが、データが書き込まれていないため、「かねやんMysqlAdmin」というソフトでSQLを実行すると以下のようなエラーが出てしまい、「;」の為と思いこんでいました。
phpからの実行、「かねやんMysqlAdmin」の両方で実行できないが、MYSQLコマンドラインから実行可能ということは何が原因なんでしょうか?
「Check the manual that corresponds to your MySQL server version for the right syntax to use near 'data2'' at line 1」
お教えいただけないでしょうか。

お礼日時:2006/12/10 18:14

おかしいですね。

MySQLでは別に文字列の中でセミコロンをエスケープしたりする必要はないはずですが。MySQLのコマンドラインから試しても同じような結果になるでしょうか?

PHPやPerlなどからSQL文字列を作り出して実行しようとしているのであれば、その時点で先の'(シングルクオート)がPHPやPerlに食われてしまっていて、結果的にセミコロンのところでエラーになっているのではないでしょうか。(それだと別のエラーになりそうな気もしますが…)
    • good
    • 0
この回答へのお礼

ham_kamoさん、回答ありがとうございます。
さきほど、MYSQLのコマンドラインから直接実行すると、replace文が実行できました。今回エラーが出ているのは、PHPからSQL文を作成して実行していたのですが。
・phpスクリプトにてSQL文作成replace文実行
エラーがでてreplaceできません。
・「かねやんSQLAdmin」等のSQLAdminソフトにて実行
エラーがでてreplaceできません。
・MYSQLコマンドラインにて実行
エラーもでず、replace可能でした。
ということはham_kamoさんのおっしゃるとおり、PHPにてつくり出したSQL分のためエラーがでているのでしょうか?
「かねやんSQLAdmin」で実行してもエラーが出るためどうすればいいのか。。。すいませんが、お教えいただけないでしょうか。

お礼日時:2006/12/10 18:09

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

関連するカテゴリからQ&Aを探す