質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

6回答

8356閲覧

SQLで値にセミコロンを入れたい

nobita119

総合スコア37

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/11/29 06:42

編集2018/11/29 06:58

非常に初歩的な質問で申し訳ないのですが、
今、phpMyAdminでSQLを送信して値を更新しようとしています。
しかし、その値はセミコロンを含んでいるため、エラーとなってしまいます。
(セミコロンを削除したら正常に登録されます)
セミコロンをエスケープするためにはどうしたらいいでしょうか。
すぐわかると思ったのですが、検索でも意外と見つけられず、質問させていただきました。

SQLは

UPDATE mytable SET para='<span style="font-size:24px;">';

といったものです。
MySQL5.7
PHP5.6
phpMyAdmin 4.8.1
を利用しています。

よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

自己解決

ご回答いただきましたみなさま、たいへんありがとうございました。
おかげさまで、phpMyAdminのクエリのシミュレートでのみ発生していて、SQL自体は実行したら問題なく通るという、私のもう一押しが足らなかったことがわかりました。
クエリのシミュレートを使う時は、その癖を理解して使うように注意したいと思います。
ありがとうございました。

投稿2018/11/30 03:12

nobita119

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

delemiterを調整してみるとか

  • 元データ

SQL

1create table tbl(id int,para varchar(200)); 2insert into tbl values(1,'hoge'),(2,'fuga');
  • 実行

SQL

1delimiter // 2UPDATE `tbl` SET para='<span style="font-size:24px;">' where id=1// 3delimiter ; 4

投稿2018/11/30 02:45

yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobita119

2018/11/30 03:07

アドバイスいただきましてありがとうございました。 こんな裏技もあるのですね。とても勉強になりました。 ちなみに今回の問題は、クエリのシミュレートだけで起こっている現象ということがわかりまして、さっそく教えていただきましたことも試してみたのですが、なんと最初の「delimiter //」を書くと「クエリのシミュレート」ボタンが消えるという新たな問題が発生し、試すことができませんでした。。後の「delimiter ;」はあっても問題ないのですが、良くわかりません。。
guest

0

エスケープについては現状のままで問題ないと思いますよ。
そのSQL文をパースしている処理が、セミコロンを終了とみなすような制限があるのではないでしょうか

投稿2018/11/29 07:14

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobita119

2018/11/29 07:52

早々にアドバイスいただきありがとうございました。私の勘違いのようです。。お手間をおかけし申し訳ありませんでしたm(_ _)m
guest

0

https://oshiete.goo.ne.jp/qa/2592175.html

こちらの記事にあるように、phpMyAdminでのみ起きる現象のような気もします。
但し情報が古い!
rururu3さんも再現できていないようですし。
私は環境がないのでSQL Fiddleで試しましたが、こちらも再現せずです。
何かわかったら追記します。

投稿2018/11/29 07:12

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobita119

2018/11/29 07:50

早々にアドバイスいただきありがとうございました。クエリのシミュレートというので確認していたのですが、何か私のとんでもない勘違いのような気がしてきました。まだ良くわかっていませんが、お手間をかけ申し訳ありませんでしたm(_ _)m
guest

0

セミコロンはシングルクォートでエスケープできます。
ですので、ご質問にあるSQLで更新できると思うので他に原因がありそうですね
私もphpMyAdminとA5Mk-2で試したところ特に問題無く更新できました。

投稿2018/11/29 07:11

mepon

総合スコア480

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobita119

2018/11/29 07:51

早々にアドバイスいただきありがとうございました。私の勘違いのようです。。お手間をおかけし申し訳ありませんでしたm(_ _)m
guest

0

セミコロンじゃなくてtableっていう名前が予約語になってるためではないかと思います。

SQL

1UPDATE `table` SET para='<span style="font-size:24px;">';

でできませんか?

投稿2018/11/29 06:47

rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobita119

2018/11/29 06:51

さっそくアドバイスいただきありがとうございました。すいません、tableは例でして、実際は別の名前を利用しています。セミコロンを消したら正常に登録されますので、セミコロンが問題だと思うのですが。。ご説明不足ですいません。。
rururu3

2018/11/29 07:06

phpMyAdminで試してみましたが記述されているSQLで更新できてしまいました・・・ちょっと再現できずお役に立てれなくて申し訳ないです。
rururu3

2018/11/29 07:10

もしかしてクエリをシミュレートでなってます? その場合はデリミタをセミコロン(;)から適当な記号に変える(例えば@とか)といいですよ。 (&文末のセミコロンを適当な記号(@)にする
nobita119

2018/11/29 07:47

はい、クエリをシミュレートで確認してます。もしかして私とんでもない勘違いをしているのかもと滝汗「クエリをシミュレート」はクエリをテストするものだと思っていたのですが、そうではないのでしょうか。。 ちなみにクエリを実行してみたら、確かに通りました。。
rururu3

2018/11/29 08:13

phpmyadminのソース見てないので確かなことは言えませんが、きっとデリミタの文字列が来たらSQL命令の区切りだと判断してそこが文字列内かチェックせず区切ってから判断してるせいでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問