• ベストアンサー

= などの特定な文字をMySQLに入力すると以降の文字が消えてしまいます。

PHPで作成したアプリケーションからMySQLにデータを登録する際、 = を含むとそれ以降の文字が登録されません。 又、'や"といったsqlに含まれる文字を入力しても保存されません。 どうすればちゃん保存されなおかつSQL Injectionに対応できるのでしょうか? よろしくお願いいたします。

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

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

簡便に「=」を含むSQL文を書いてみてください。 検証してみます。それと登録しようとしている フィールドの型と長さもあわせて書いてみてください。 「=」なんて普通の文字なので、特になんの処理も いらないと思います。 INSERT INTO `test` ( `id` , `data` ) VALUES ( '1', 'abc=xyz'); などでdataに「abc」と登録されるということですか?

Intel_404
質問者

お礼

すいません、PHPには原因がありませんでした。 DBに原因があったようです。本当にすいませんでした。

Intel_404
質問者

補足

ありがとうございます。 =を含むSQL文ですが、現在作成しているのが小さなWikiシステムで=に限らず日本語、英語、英数字、全角、半角などなどをDBに保存するようにしています。データ型はたんにtextと設定したと思います。 >INSERT INTO `test` ( `id` , `data` ) VALUES ( >'1', 'abc=xyz'); >などでdataに「abc」と登録されるということですか? そうです。 ほげほげhoigegjd何でも=穂下穂下2 の場合 ほげほげhoigegjd何でも はDBに残るのですが =穂下穂下2 は保存されません。 どうしたらいいのでしょうか?

その他の回答 (2)

  • tecinfo
  • ベストアンサー率52% (32/61)
回答No.2

MySQLなら、「mysql_escape_string」関数を使いましょう。 詳しくは下のURLに書いてありますが、 http://www.zend.co.jp/tech/index.php?%A5%BB%A5%AD%A5%E5%A5%EA%A5%C6%A5%A3%BB%D8%BF%CB%2FSQL%A5%A4%A5%F3%A5%B8%A5%A7%A5%AF%A5%B7%A5%E7%A5%F3 $sql = "select from foo where name like='%" .mysql_escape_string($key) . "%'"; とすれば、'"=などが入っていても、正常にSQLが扱えるようになります。

参考URL:
http://php.benscom.com/manual/ja/function.mysql-escape-string.php
Intel_404
質問者

お礼

回答ありがとうございました。 実際にmysql_escape_string()やmysql_real_escape_string()などを使用してみたのですがだめでした。 文字と文字の間に=を入力すると=以降の文字が消えてしまうのです。 別な方法として=や'"などを全角に置き換える方法もあるのですが特定の文字を全角に置き換えるにはどうしたらいいのでしょうか?

Intel_404
質問者

補足

いまphpMyadminで確かめてみたところ'や";などはしっかりサニタイズできており表示できます。しかし=のみがデータベースに登録されません。 どうぞよろしくお願いいたします。

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

"や' は \" \' 等としてください = は文字列扱いにすれば良いです 例えばsampleというフィールドに '"= と入れたい場合は sample = '\'\"=' とすれば良いです

Intel_404
質問者

お礼

ありがとうございます。 = '\'\"=' とする作業を = と入力しただけでPHPが自動的に行うにはどうしたらいいのでしょうか? よろしくお願いいたします。

関連するQ&A

  • mySQL 4.0で文字化け

    はじめまして、PHP+mySQLでプログラムを勉強中の初心者です。 PHPからインサートした日本語データをphpmyadminで確認するとデータが化けています。SQL文自体をPHPで表示させると文字化けせずにちゃんと表示されます。  mySQL 4.1以降なら SET NAMESというコマンドをDB接続後に入れることで問題が回避できると言うことですが、mySQL 4.0ではコマンドエラーになってしまいます。 レンタルサーバーなので、PHPのアプリケーション側で対応できたらと考えています。 何かよい方法がないでしょうか? PHP 4.3.11は mySQL 4.0.27です。 PHPのキャラクターはutf-8, mySQLのCharactersetは latin1となっていました。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHPでMysqlに絵文字を入力すると・・・

    こんにちは。 今回PHP4.3.9とMysql4.1.20をつかって掲示板を作成しております。 ドコモの書き込みで絵文字を入力したらうまくデーターに入力できたいないようなのです。 もちろんパソコンではみることはできないのですが、ドコモの携帯でも表示されないのです。 とくにmb関連の関数をつかっているわけでもなく、 今は$_REQUEST['body']をそのままMysqlに突っ込んでいる形です。 実行した際にSQL文をechoでみてもやはり何も入っておりません。 削除されているようです。 申し訳ないですが、どこかでそのように絵文字が削除される原因が考えられるでしょうか? ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • テキストボックスに入力された日本語が文字化けしてMySQLに保存される

    テキストボックスに入力された日本語が文字化けしてMySQLに保存される。 Webアプリケーション(PHP)を作成しているのですが、テキストボックスに入力された日本語が文字化けしてMySQLに保存されます。 テキストエリアに入力された日本語は文字化けせずに保存されます。 何が原因かわかりません。 わかる方教えて下さい。

    • ベストアンサー
    • PHP
  • phpでMySQL内の重複文字カウント

    phpでMySQL内に格納されている文字データのうち、重複した文字データを 重複数順にランキング表示するプログラムを作成しようと思います。 例 MySQLデータが 昼 夜 昼 昼 夜 朝 であれば、 1、昼 2、夜 3、朝 とphpで表示 MySQLへのデータ登録は、普通にmysql_queryでSQL文を飛ばしてデータ挿入しています。 その際、MySQL内のデータと重複したらイベント(重複カウントを1増やすなど)を起こす方法、 もしくは、重複しているデータと、その重複数を取得できるようなphp関数、SQL文はないものでしょうか? データ数自体は100程度のものなので、全データをphpで配列に格納してから、 配列内を捜査でもよいのですが・・・ 初歩的かつ限定的な質問ですが、どうかご回答お願いします。

    • ベストアンサー
    • PHP
  • MySQLにデータを入れる際、エンコードしたほうが...

    PHPとMySQLを組み合わせて掲示板を作成しているのですが、SQLインジェクションの心配や、検索を簡単にするためDBに入力する際、すべてのデータをPHP側でエンコードし入力し、表示するときのみでコードするやり方はPHP的にもMySQL的にもどうなのでしょうか? 自分的には多少データ量は増えるものの、英数字や=などの記号のみを入力するだけなので、比較的検索は簡単になると思います。また、SQLインジェクションなども記号が変換されるため防ぐことができると考えています。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • MySQLへデータ入力時の文字化け

    PHPで作成したWEBページでMySQLのデータを更新すると、特定文字のみ文字化けします。 現在、発見されているのは”予定”という文字です。 文字化けすると”嵐閨”という文字になります。 サーバ環境はLinuxFedoraCore3、Apache2.0.52、PHP4.3.11、MySQL4.1.10です。 phpMyAdminから同じテーブルへ”予定”という文字を入力すると、問題なく表示されています。 PHPで作成したコマンド・コードが悪いのではなく、 httpd.confやphp.iniの設定が悪いように思うのですが、何が悪いのか分かりません。 このような症状についてご存知でしたら、ご指導願いします。

    • ベストアンサー
    • PHP
  • MySQLのビット演算

    いつもお世話になっております。 PHPとMySQLでアプリケーションの作成をしています。 MySQLでのビット計算で検索結果を表示しようとしています。 ■PHPファイルにはチェックボックスで、約70個の項目が表示されています。 ■データベースには「0」と「1」で以下のように登録されています。  00011・・・・・1110 ■チェックされた場合は「1」、チェックされていない場合は「0」  PHPファイルからsubmitされたときに、↑の条件でデータを生成します。 ■一致したものが1つでもあれば検索結果に表示します。  00011・・・・・1110(データベースのデータ) &00010・・・・・0000(submitされたデータ) ------------------------  00010・・・・・0000 上記のようにしたい場合、SQL文はどのように記述したらよろしいでしょうか。 ご教示よろしくお願いいたします。 <環境> MySQL:4.1.20 PHP:4.3.9

    • ベストアンサー
    • MySQL
  • PHP4とMySQL5の連携での文字化け

    質問させていただきます。 以前LinuxにてMySQL3で運用していたデータベースを、 MySQLを5にVerUPしてWinXPのサーバーに移植しました。 その際、有名な不都合だとわかっていますが、 PHPで表示するDBのデータが文字化けしてしまったのです。 MySQLを3に戻して使えるなら良いのですが、 事情があり、どうしても5でなければいけないのです。 その際、PHPのソースには手を付けられません。 MySQLとphp.iniの設定だけで、 どうにか解決する事は出来ないでしょうか? PHPのソースはEUCで書かれています。 出来る限り検索をして、トライしてみたのですが どうしても解決することが出来ませんでした。 SQL文でバックアップがありますので、 データ自体は1から入れなおす事が可能です。 具体的にどこをどう一致させればいいか、 解説してくださる方がいらっしゃいましたら、 どうかお力を貸していただきたく存じます。 宜しくお願いします。

  • mysql登録時の文字化け

    PHPで作成した登録フォームで入力されたデータをmysqlに登録すると、文字化けというか?になってしまいます。すべての文字を検証したわけではないのですが、どうも環境依存文字が?になってしまうようです。環境依存文字を登録するにはどうしたらいいでしょうか? ちなみに、現在の文字コードは HTMLの<head>の部分に<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> PHP開始時に mb_language("uni"); mb_internal_encoding("utf-8"); mb_http_input("auto"); mb_http_output("utf-8"); ただし、PHPの設定ファイルがさわれないのでPHP使用時の内部文字コードは恐らくデフォルトのEUC mysqlの文字コードとしては、DB,テーブルともにutf8_unicode_ci ファイルの保存形式はutf-8(BOMなし) SQL文のデータ部分にmb_convert_encodingを使用 例: insert into test(test1,test2) values( mb_convert_encoding("テスト1","EUC-JP","UTF-8"), mb_convert_encoding("テスト2","EUC-JP","UTF-8")) よろしくお願いします

    • ベストアンサー
    • PHP
  • MySQLが文字化けしてしまう

    MySQLが文字化けしてしまう 現在、PHPとMYSQLを使ってデーターベースに画像をアップするプログラムを作っています。 http://websegment.net/2010/09/05/php-mysql-blob/ のサイトのプログラムでまず作成してみたところデーターベースへの 登録はうまくいったのですが、ターミナルでテーブルを確認したところ文字化けしていました。 フィールドのfile、size辺りで文字化けしてしまっているようです。 どうすれば、文字化けが直るのでしょうか? 教えてください。

    • ベストアンサー
    • PHP

専門家に質問してみよう