• ベストアンサー

insertクエリで、値にシングルクオートがある場合

insertクエリで、値にシングルクオートがある場合、 どのようにして解決すればよいのか、お教え願えますでしょうか。 サンプル: $data = 'abcd'efg'hijk'; $query = "INSERT INTO テーブル名 ( フィールド名 ) VALUES( $data )";

  • PHP
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • ayucat
  • ベストアンサー率12% (7/55)
回答No.3

$data = "abcd'efg'hijk"; sqlエスケープ($data); $query = "INSERT INTO テーブル名 ( フィールド名 ) VALUES( '$data' )"; #1さんの回答で既に答えになっていると思いますが、 SQLのライブラリを通して、prepared statement, bindを使ってやることで、 SQLインジェクションなどの問題にも併せて対応できるかと思います。 MySQLやPostgreSQLで異なる関数を使わなくてよくなり、 SQLサーバの種類の差異も吸収できるようになります。

参考URL:
http://www.ipa.go.jp/security/awareness/vendor/programming/a02_01.html

その他の回答 (2)

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がると申します。 #1さんの通り'を二重にするほかに、大抵のDBでは¥によるクオートが有効になります。 このあたりはSQL-Injectionという脆弱性にまつわる話になるので、googleなどで是非詳しくお調べになってみてください。

回答No.1

クオートを二つにするとよろしいです。 //PostgreSQLなら $data = pg_escape_string("abcd'efg'hijk"); //MySQLなら $data = mysql_real_escape_string("abcd'efg'hijk"); こんな感じにするといいかと。

関連するQ&A

  • postした値のデータ型

    htmlのフォームからpostした値を整数型として受け取れますか? $id = $_POST['id']; こんな感じで受け取ると文字列として受け取っているようなのでmysqlに保存できません シングルクォートで囲むと文字列になるので囲わないでdbに入れたいのです mysql_query("INSERT INTO table(id) VALUES($id');");

    • ベストアンサー
    • PHP
  • PHPによるSQL文の中にPHP処理を記述するには

    PHP内のSQL発行部分の $QUERY="     INSERT     INTO         TABLE     (         `FIELD_A`,         `FIELD_B`,         `FIELD_C`     ) values (         `{$DATA[1]}`,         `{$DATA[2]}`,         `{$DATA[3]}`     ) "; このようなクエリを $QUERY="     INSERT     INTO         TABLE     (         `FIELD_A`,         `FIELD_B`,         `FIELD_C`     ) values (         `{$DATA[($i++)]}`,         `{$DATA[($i++)]}`,         `{$DATA[($i++)]}`     ) "; のような感じにしたいのですが うまくいきません。 どうすれば、クエリー文の中で$i++等の処理を 含まさせることができるでしょうか?

    • ベストアンサー
    • PHP
  • ダブルクォート内で変数を展開

    PHPでMySQLのINSERTがうまくいかず、困っています。 検索したところ、下記の情報がありました。 http://okwave.jp/qa1324983.html ここの良回答20ptの通りすると動きますが、 ダブルクォート内で変数を展開させるにはどうしたらいいでしょうか?。 ↓これをダブルクォート内で変数を展開させたい mysql_query("insert into area_tbl (area)values('$area')"); よろしくお願いします。

    • ベストアンサー
    • PHP
  • <VB.NET>INSERT文でDBにデータを入れたい 

    プログラム初心者です。 ボタンを押したらtextboxの値がDBのテーブルに格納されて画面が閉じるという処理をしたいです。 そして他の画面でボタンを押すとINSERT済みのテーブルが出るという 処理をしようと思っています。 今のところは、他の画面でボタンを押してもINSERT済みのテーブルが でないという状態です。元のテーブルのデータはでます。 サンプルを見つけてやってみたのですが、思った結果がでません。 public sub botton1-click dim sql_insert as string dim cmd_insert as oledbcommand dim strconn as string = "provider = ~OLEDB4.0 = ~.mdb" DA = New oledbDataAdapter conn = New oledbconnection(strconn) sql_insert = "INSERT INTO A組(名前) VALUES(TextBox1.Text) cmd_insert = New oledbcommand(sql_insert,conn) DA.insertCommand = cmd_insert Me.colse end sub DataAdapterはdatasetを使わず直接DBに格納させるINSERTの時にでも 使うのでしょうか? 自分自身まだよく分かっていないので、正しいコードと処理の流れを 教えて欲しいです。 使っているのはaccess2000、VB.NET2003です。よろしくお願いします。

  • ヒアドキュメントでSQLを書く事について

    ヒアドキュメントを使ってSQLクエリを書くのは良くないという話を聞いたのですが、どのようなデメリットがあるのでしょうか? あと、購入した書籍に INSERT INTO テーブル名 SET フィールド名=入力値 というSQLが書いてあったのですが、 INSERT INTO テーブル名 (フィールド名) VALUES(入力値) とどちらが一般的な記述方法なのでしょうか? それぞれにメリット・デメリットなどありましたら教えて下さい。 PHPを始めて間もないため不安が多く質問ばかりですみません。

    • ベストアンサー
    • PHP
  • 変数のinsertに関しまして

    MySQLのインサートに関して質問です。 2つの値を登録したい場合、 下記のように対応すれば、 データの挿入は通常どおり完了しますが、 insert into テーブル名 (フィールド1, フィールド2) values (値1, 値2);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 私の場合は、 「ken_name」と「machi_name」という変数を、 上記でいうところの、 「値1」と「値2」に入力したいと思っています。 変数の指す部分は、 それぞれ30文字程度の英数字です。 プログラム内で、 以下のように、 インサートのクエリー処理を行ってみたら、 DB接続も正常に出来ているし、 エラーとかも一切出ていないのですが、 DB内のテーブルに何も登録されていませんでした。 insert into テーブル名 (フィールド1, フィールド2) values (ken_name, machi_name);  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ やり方としては、合っていますでしょうか? 何かアドバイスいただけると嬉しいです。 宜しくお願い致します。

  • if($mode == "insert"){ の書き方についてアドバイスをお願いします。

    FC4、php5とmysql4.1.20を入れて学習しています。 入力フォームに <form action="insert.php?mode=insert" method="POST"......と書き、 データ受取phpスクリプトに <? if($mode == "insert"){ $conn = mysql_connect("localhost","root","pass"); mysql_select_db("testDB","$conn"); $sql = "INSERT INTO SHOHIN (tanka,suu) values ('$tanka','$suu')"; ........... と書いたサンプルがあります。 ところが、入力フォームにデータをいれ、登録ボタンを押すと urlが、 http://localhost/***/insert.phpから http://localhost/***/insert.php?mode=insert に変わりますが、入力欄が白紙に戻ってデータ登録が出来ません。(そもそも、DBに接続が出来ません。) php.iniの register_globals = On にしても、状況は同じです。 コマンドライン上では、同じユーザ名パスワードでmysqlに順調に接続できデータ登録も出来ます。 試みに、php.iniの register_globals = Offで if($mode == "insert"){ を、if($_POST['$mode == insert']){ と変えてみましたが、解決出来ません。この書き方が拙いのでしょうか? 何かアドバイスを頂ければ有り難いです。よろしくお願いします。

    • ベストアンサー
    • PHP
  • Access 追加クエリについて

    こんにちは! Accessについて、質問させていただきます。 追加クエリを5つ作成したのですが、『複数値を持つフィールドをINSERT INTO クエリに含めることはできません』とエラーが出ます。 調べたところ、ルックアップウィザードに追加クエリが使用できないものと思われます。 追加クエリの元になるテーブルには、ルックアップウィザードを適用しているフィールド(他のテーブルから値を取得している)が複数あります(フィールド名:取次名・担当者名・形態)。 ちなみに、5つの追加クエリのうち1つはルックアップウィザードのフィールド(値を手入力で設定)も1つありますが正常に作動しています。 何か解決策はありますでしょうか? よろしくお願いします!!

  • バルクINSERT直後に、最後のIncremet値は取得できますか?

    PHPからMySQLへトランザクションを使わずに、 INSERT INTO test (id,count) VALUES (5,5),(6,6) のようにINSERTした直後に、SELECT LAST_INSERT_ID(); としても、5が返却されてしまいます。 これはMySQLの仕様でしょうか? 又、 SELECT LAST_INSERT_ID() ではなく、 SELECT LAST_INSERT_ID() FROM test; のようにテーブル名を指定する方法は何か意味があるのでしょうか? テーブル名を指定すると、テーブルにあるレコード数分 データが返却されてしまいました。。

    • ベストアンサー
    • MySQL
  • insert文等で「`」の有無で失敗するテーブルとしないテーブルがある。

    XAMPP(winXP、PHP4)を使っています。 Aのテーブルでは $query= "insert into table (a,b,c,d) values('1','2','3','4')"; $result = mysql_query($query); でデータが追加されるのに、Bのテーブルでは失敗しました。 今日ずっと何が間違っているのかわからなかったのdですが、 $query= "insert into table (`a`,`b`,`c`,`d`) values('1','2','3','4')"; $result = mysql_query($query); とすると成功しました。 なぜAのテーブルでは「`」が無くても成功したのに、Bのテーブルでは必要なのでしょうか。 宜しくお願いします。

    • ベストアンサー
    • MySQL