• 締切済み

MYSQLのデータに「;」を入力

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

  • MySQL
  • 回答数6
  • ありがとう数14

みんなの回答

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.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'); に変えても同じくエラーにはならずにレコードが挿入されました。 すみません、こちらの環境で再現しないので私もちょっとお手上げです。 バージョンの違いによるものなのかな…。 お力になれずすみません。他に詳しい方がフォローしてくれるといいのですが。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.5

$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の部分の文字列には、実際には'(シングルクオート)が含まれていたりしませんか?

hiro5052t
質問者

補足

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

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.4

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つついているのが気になります。やはりクオートがらみのような気がするのですが。

hiro5052t
質問者

補足

ham_kamoさんありがとうございます。 >そのSQL作成のコードを記載していただければ、具体的に何かわかるかもしれないので、補足願えないでしょうか。 $hoge = "testdata1; testdata2; testdata3"; mysql_query(sprintf("replace into tableA set hoge='%s';",$hoge)); こんな感じです。

  • Xaval
  • ベストアンサー率58% (61/105)
回答No.3

参考までに。。 phpMyAdminは日本語対応です。

回答No.2

MySQL 5.0のcommand line clientでは、問題なく実行できました。 >data1とdata2の間のセミコロンでおこられる 具体的に、どんなエラーになるのですか?

hiro5052t
質問者

お礼

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」 お教えいただけないでしょうか。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

おかしいですね。MySQLでは別に文字列の中でセミコロンをエスケープしたりする必要はないはずですが。MySQLのコマンドラインから試しても同じような結果になるでしょうか? PHPやPerlなどからSQL文字列を作り出して実行しようとしているのであれば、その時点で先の'(シングルクオート)がPHPやPerlに食われてしまっていて、結果的にセミコロンのところでエラーになっているのではないでしょうか。(それだと別のエラーになりそうな気もしますが…)

hiro5052t
質問者

お礼

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

関連するQ&A

  • MySQLで更新の結果を知るには

    こんばんは 業務で以下の切り分けをしたいのですが、可能でしょうか。 SOAP通信を使っていて、パフォーマンス的な観点から、select文は使用したくないと思っています。 ■環境 ・PHP5 ・MySQL ・FreeBSD6 ■やりたいこと Update文で更新を行ったときに、データそのものがなくて更新できなかったのか、データは存在するがPK以外の条件がマッチしなくて更新できなかったのかで、エラーコードを分けたい 例えば、  update tableA set column1='aaa' where pk1=1 and pk2=2 and column2='bbb'; といったSQL文で、「pk1=1 and pk2=2」に合致するデータがないのか、データは存在するが「column2='bbb'」には合致しなくて更新されないのかの切り分けをしたいのです。 かなり、困ってしまっています。 SQL文でできない場合でも、何かしらの解決方法がありましたら、よろしくお願いいたします!!!

  • MySQLの指定日付に関連するデータをSELECT

    MySQLにて以下のようなデータを扱っているのですが、 ------------------------------ | id | start | end | ------------------------------ | 1 | 2014-10-14 | 2014-10-14 | | 2 | 2014-09-20 | 2014-10-10 | | 3 | 2014-10-20 | 2014-11-31 | | 4 | 2014-10-15 | 2014-10-16 | | 4 | 2014-09-15 | 2014-09-16 | ------------------------------ SQLで 開始:2014-10-01 から 終了日:2014-10-31 の間に関わるデータを引っ張れないかと試行錯誤しております。 上のデータですと 1,2,3が引けると良いのですが、、、 BETWEEN を使ってしまうと、その間にあるデータしかひっぱれず。。

    • ベストアンサー
    • MySQL
  • データ入力が出来ません

    よろしくお願いします。 高スペックを購入することになり、これを期にMysql4から→5へ変更しました。そして4のデータアリアをそっくりそのまま5へコピーしました。日本語の文字化けもなくうまく表示されています。 さてその新しい構成になったところで試しとうことで、データ入力のプログラム実行させました。ところがエラーメッセージは出ないのに 全く書き込みが出来ません。 おかしいと思い新規でテーブル作って同じプログラムを動作させたら問題なく入力できたのです。 知りたいのは 1.こういうバージョンアップのときはコピーはよろしくないのか? 2.そのコピーで出来たテーブルに入力をするには? 3.とくにエラーメッセージもなく仕掛けた入力完了メッセージがでたのはなぜ? です。 使ったphpソースは以下 $sql="INSERT INTO hoge (a1,a2,a3) VALUES('$a1','$a2','$a3')" $rec=mysql_query($sql); $init=True; if($init){ print "入力完了"; }else{ print "入力失敗"; } 環境は 古いほう mysql4 php4 新しいほう mysql5 php5 です。 きっと初歩的なことだと思いますがよろしくお願いします。

  • MYSQL バイナリデータ変換取得

    以下のようなbatでunhex(`idm`)を使って変換しているのですが、出力されるデータが他のところも変換されて出力されます。どうしてでしょうか? characterの設定か、SQLがだめなのでしょうか? ECHO OFF SET MYSQLPATH="C:\Program Files\MySQL\MySQL Server 5.0\bin" SET character SET sjis;>create_sql.sql ECHO select unhex(`idm`),a.emp_code,a.emp_name_kana from a,b where b.emp_code=a.emp_code into outfile "C:/master.csv" fields terminated by ',';>>create_sql.sql %MYSQLPATH%\mysql.exe -u root -proot test<create_sql.sql exit

    • ベストアンサー
    • MySQL
  • MySQL 文字化けについて(PHP)

    いつもお世話になっております。 PHPを使用してMySQLからデータを出し入れする際に文字化けが発生し原因がわからず、大変困っております。 MySQL 4.1.18(クライアント 4.1.21) MySQL文字セット UTF-8 Unicode (utf8) 様々なHPを検索して、下記のような一文を入れれば大丈夫と思ったのですが、それでも文字化けは改善されませんでした。 mysql_query("SET NAMES ujis"); 上記文はmysql_connectの直後に記述しております。 INSERT文、SELECT文どちらに不備があるのかわかりません。 ご教授お願い致します。 記述プログラム:(INSERT文) /********************************* * MySQL接続 ********************************/ // DB Connect $db = db_connect(); // DB Select select_db($db); // Set Names mysql_query("SET NAMES ujis"); /********************************* * INSERT文 ********************************/ $sql = "insert into T_YOYAKU values ('1','A','1','あいうえお')"; mysql_query($sql) 省略・・・ 記述プログラム:(SELECT文) /********************************* * MySQL接続 ********************************/ // DB Connect $db = db_connect(); // DB Select select_db($db); // Set Names mysql_query("SET NAMES ujis"); /********************************* * INSERT文 ********************************/ $sql = "select * from T_YOYAKU"; if ( $rs = mysql_query($sql) ) {

    • ベストアンサー
    • MySQL
  • PHP+MySQLでデータ登録がうまくいかない

    いつもお世話になっています。 早速質問です。 ユーザ登録フォームの作成をしています。 Select文を使って2重登録の確認後、DBに登録するのですが 2重登録はちゃんと機能しているのに、登録が出来ません。 どのようにしたらいいか、アドバイスいただけますか? お手数ですが、よろしくお願いします。 mysql_query("lock tables user_data write"); $sql = "select USER from user_data where USER = '" . $_POST["USER"] . "'"; $res = mysql_query($sql); if (mysql_num_rows($res) > 0) { echo "すでに登録済みです。"; mysql_query("unlock tables"); mysql_close($con); exit; } $sql = "insert into user_data(USER, pass) values ('" . $_POST["USER"] . "','" . $_POST["pass"] . "');"; mysql_query($sql); mysql_query("unlock tables"); mysql_close($con);

    • ベストアンサー
    • MySQL
  • 1つのテーブルから複数のテーブルへのデータ振分け

    MySQLを使用して、tableAというテーブルのデータを tableB,tableC,tableDというテーブルに振り分けたいと思っています。 1日1回、自動的に行いたいと思っています。 たとえば、tableAのテーブル構成が下記のようなもので ================== name sex birth address phone email company ================== name,address,phoneはtableBに name,sex,birthはtableCに name,companyはtableDに分けるというような イメージです。 私の考えでは、下記のようなSQL文をPHPから呼び出して、タスクで 実行させてそれぞれ別のテーブルに振り分けようと思っている のですが、、もっと良いツールや方法があればお教えいただけ ませんでしょうか。 宜しくお願いいたします。 ---------------------------------------------------------------------------------------------------- INSERT INTO tableB (name,address,phone) SELECT tableA.name,tableA.address,tableA.phone FROM tableA AND INSERT INTO tableC (name,sex,birth) SELECT tableA.name,tableA.sex,tableA.birth FROM tableA AND INSERT INTO tableD (name,company) SELECT tableA.name,tableA.company FROM tableA; ----------------------------------------------------------------------------------------------------

  • mysql超初心者です。テーブルへのデータ流し込みと基本操作を教えてください!

    mysqlの超初心者です。テーブルにデータの直接入力はできるのに下記の手順で.sqlファイルのデータを流し込もうとするとどうしてもエラーが出てしまいます。何がいけないのか分かりません。誰か教えてください! コマンドプロンプトで下のコマンドでログイン d:\mysql\店舗データ>mysql -u root -p create database db_shouhin_kanri 成功 mysql> use db_hanbai_kanri; Database changed mysql> create table tbl_shouhin_hyou -> ( -> shouhin_code char(4), -> shouhin_name char(16), -> tanka integer, -> primary key(shouhin_code) -> ); 成功 set names sjis; 成功 mysql> insert into tbl_shouhin_hyou -> ( -> shouhin_code, -> shouhin_name, -> tanka -> ) -> values -> ( -> '1000', -> 'イチゴ味', -> 300 -> ); データの直接入力成功。 メモ帳で以下の様にデータを打ち込み 店舗データフォルダー(d:\mysql\店舗データ)にshouhinlist.sqlで保存 INSERT INTO tbl_shouhin_hyou (shouhin_code,shouhin_name,tanka) values ('1001','リンゴ味',400); INSERT INTO tbl_shouhin_hyou (shouhin_code,shouhin_name,tanka) values ('1002','グレープ味',500); mysql>\. shouhinlist.sql 流し込みをしようとすると ERROR 1064(42000): You have an error in your syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near'■■i' at line 1 となり、うまく流し込みが出来ないです。 何がいけないんでしょうか。 また入力中に mysql> create table tbl_shouhin_hyou -> ( -> shouhin_code char(4), -> shouhin_name char(16. -> 例えばこのように文を間違えてenterした場合、一つ上の行に戻って書きなおすにはどうすればいいですか? 毎回\cで初めから書き直すのは大変でしょうがないので誰かアドバイスをお願いします!!

  • 【お願いします助けてください】Exel+MySQL

    エクセルでMYSQLを扱おうとしています。 色々やっているのですが、以下のようなユーザー関数を作ってエクセルからMYSQLにデータを登録しようと試みました。引数が変ですが、table_nameでテーブルを指定します。set_data(0)でフィールド名、set_data(1)がset_data(0)で指定した値を設定し、データを書き込む、以下続くという感じになっています。 例えばこういう感じで引数を設定すると、 Call Set_Record("post_data", "post_number", "000-000", "first_section", "大日本県", "second_section", "大日本市大日本町", "third_section", "365-1452") MYSQL上では insert into post_data set post_number = 000-000 , first_section = 大日本県 , second_section = 大日本市大日本町 , third_section = 365-1452 ; という感じの命令が実行されるというだけのものです。 これで分からないのは、指定した値が半角英数であればちゃんとうまくいくのですが、全角を指定すると、syntax errorになることです。しかし、コマンドプロンプト上からであれば、なぜか全角で指定してもエラーがでないのです。なんかもうちんぷんかんぷんでわけ分からん感じです。フィールドのデータ型はtext型のやつに上のマクロを試してみました。 Function Set_Record(table_name As String, ParamArray set_data() As Variant) Dim cn As Variant Dim set_sql As String Dim i, j As Integer '** ODBC 接続 Set cn = CreateObject("ADODB.Connection") cn.Open "dsn=msdasql.1;data source = test;" cn.CursorLocation = 3 '** トランザクション開始 cn.BeginTrans set_sql = "insert into" & Chr(32) & table_name & Chr(32) & "set " For i = 0 To UBound(set_data) If i Mod 2 = 0 Then set_sql = set_sql & set_data(i) & Chr(32) & "=" & Chr(32) Else If i <> UBound(set_data) Then set_sql = set_sql & set_data(i) & Chr(32) & "," & Chr(32) Else set_sql = set_sql & set_data(i) & Chr(32) & ";" End If End If Next MsgBox set_sql cn.Execute set_sql '** トランザクション終了 cn.CommitTrans

  • mySQLへのデータ接続全般について

    現在独学でPERL MYSQL PHPを学んでおります。 MYSQLからPHPにデータを書き込ませる、読み込ませるといった場合、 $sql="insert into~";とかpost getで投げるなどの決まりの構文があるとゆうことまでは理解できます。PERLをMYSQLに投げる場合も同じように考えたらいいのでしょうか?いろいろなサイトをあさってみても構文例がややこして理解できません。 超初心者ですので、とてもわかりやすく教えてくれるサイトなどありましたら教えてください。

    • ベストアンサー
    • Perl