• ベストアンサー

sqlite_escape_stringのアンエスケープ方法

sqliteのエスケープ方法としてPHPマニュアルでは sqlite_escape_string() を利用することが望ましいと 記述されています。 実際にsqlite_escape_string() を使用してDBに格納するのは 問題ないのですが、データを取り出したときに エスケープされたままで出てきます。 アンエスケープする方法はどのようなものでしょうか? str_replace("'","''",取り出した文字列); とかではないですよね・・・。

  • fugur
  • お礼率30% (4/13)
  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

mysqlから取り出してから、unescapeが必要になった覚えがないですけど. 以下の状況なのでは?? http://jp.php.net/manual/ja/function.mysql-real-escape-string.php phpマニュアル引用 「 magic_quotes_gpc が有効な場合は、 まず最初に stripslashes() を適用します。そうしないと、すでにエスケープされているデータに対してさらにエスケープ処理を してしまうことになります」 「\n」→ magic_quotes_gpc on「\\n」→ sqlite_escape_string()「\\\\n」 → mysql 内への格納「\\n」→ 取り出し「\\n」

参考URL:
http://jp.php.net/manual/ja/function.mysql-real-escape-string.php
fugur
質問者

お礼

何度かmagic_quotes_gpcの設定も確認しました。 しかしながら、お恥ずかしいことに sqlite_escape_string() を 2回かけていたらしく DBには ' ではなく '' で入ってました。 エスケープされているのだからこれで正しいと思っていました。 実際は ' は エスケープされて '' ですが DBには ' で入るのですね・・・。 回答ありがとうございました。

関連するQ&A

  • mysql_real_escape_string

    mysql_real_escape_stringについて調べていると、私と同じことを疑問に思い質問している人がいました。 こちらのページです。 http://okwave.jp/qa/q4423735.html mysql_real_escape_stringを通してDBに入れるとします。 すると、「テスト\」というデータをINSERTをするとDBには「テスト\」で入るのでしょうか? では、mysql_real_escape_stringを通さずにdbに入れても 「テスト\」というデータをINSERTをするとDBには「テスト\」で入ると思います。 上記のとおりとした場合、PHPはどうやってmysql_real_escape_stringを通したかどうか判定しているのでしょうか? 現在、mysql_real_escape_stringを通してDBに入れると、 「テスト\\」というデータがDBに入っています。 それをどうやって戻すのか調べていて、上記の質問を見つけました。 どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • 関数htmlspecialcharsと関数sqlite_escape_stringの扱い方

    いつもお世話になっております。 環境:PHP5/SQLite3 関数 htmlspecialchars 関数 sqlite_escape_string サイトのセキュリティを考慮し、 上記2関数をなんとなく利用しているのですが、 この「なんとなく」を卒業したいと思っています。 アドバイスして頂きたい内容を書きますと、下記のようになります。 ---------------------------------------- 上記の2関数のうまい使い分けと言いますか、 「こういう時にはこっち!ああいう時には、あっち! んでもって、 これこれこういう時には、どっちも使え!」 ---------------------------------------- というようなアドバイスを期待しております。 DBのクエリ文に使用しないような場合でも、 sqlite_escape_string関数で浄化しておいて損はないように思うのですが、 そういう使い方だと何か問題はありますでしょうか。 (無視できるような小さな問題であれば、気にしないつもりです。) 浄化能力を包含関係で考えると、 htmlspecialchars ⊂ sqlite_escape_string と私は考えていますが、違いますでしょうか。 それと、これらの関数の、 使うタイミングと使う際の注意事項 についても、あれこれお話し頂けると嬉しいです。 具体例(コードorシチュエーション)を示して頂けると助かります。 他にも、こんな関数でも浄化できます、 というようなアドバイスも大歓迎です。 と、とても抽象的な質問文になりましたが、、、 どなたか、「ワンポイントアドバイス」でも結構ですので、 どうか宜しくお願い致します。

    • 締切済み
    • PHP
  • mysql_real_escape_string?

    mysql_real_escape_stringは、非推奨なのでしょうか? ▽PHP: mysql_real_escape_string - Manual   http://php.net/manual/ja/function.mysql-real-escape-string.php >この拡張モジュールを使うことはおすすめできません。 MySQLi あるいは PDO_MySQL を使うべきです この「拡張モジュール」って何を意味しているのでしょうか? 「mysql_real_escape_string」のことでしょうか? それとも、mysql_set_charset()などで、「デフォルトの文字セット」を設定しておけば、利用しても良いのでしょうか?

    • ベストアンサー
    • PHP
  • mysql_real_escape_stringについて

    PHPとMYSQLで連携させ組んでおります。文字コードはutf-8で改行コードはLFです。 ざっくりですが流れとしてはフォームからユーザーが入力した値を mysql_real_escape_stringしデータ登録しているのですが改行文字に問題があります。 ※改行文字は\r\nでも\rでも最終的に\nになるように統一しております。 それを踏まえて単純に登録する値を静的に以下のように作成します。 $val1 = mysql_real_escape_string("あああ\nいいい''ううう"); $val2 = "あああ\nいいい''ううう"; phpmyadminからテーブルを開きエクスポートしSQLを確認すると $val1は(1, 'あああ\\nい\\''\\''いい')となり $val2は(2, 'あああ\nい''''いい')となっています。 これは当然の動きかとは思うのですが改行文字\nが\\nになるのを防げないものかと 悩んでいるのですがこれは無理でしょうか? mysql_real_escape_stringしない場合エスケープもされないのでそのままの状態なのですが データを登録する場合やselect文でWHERE句を用いる場合セキュリティ的に外すことも できないもの(かと思い込んでいる)でどうしていいかわからない状態です。 知識もあいまいなもので無理なものだとわかればすぐにでも諦めがつくのですが なにかいい方法があるのでは・・・と淡い期待を持っており質問させて頂きました。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • SQLiteについて

    SQLiteのサンプルに、以下のような記述がありましたが extends(派生クラス) ということは元の基本クラスの記述があるということなのでしょうか? https://www.php.net/manual/ja/sqlite3.open.php /** * SQLite3 クラスを継承して __construct を変更し、 * open メソッドで DB を初期化します */ class MyDB extends SQLite3 {

    • ベストアンサー
    • MySQL
  • mysql_real_escape_stringについて

    マニュアルを見ると以下の説明がありました。 >mysql_real_escape_string() は、MySQL のライブラリ関数 mysql_real_escape_string をコールしています。 >これは以下の文字について先頭にバックスラッシュを付加します。 \x00, \n, \r, \, ', " そして \x1a. phpでpdoを使用しmysqlに登録しているのですがこの結果は正しくエスケープできているでしょうか? // 登録情報配列 $user = array( 'id' => 'test', 'pass' => '\x00 \n \r \ \x1a' ); // 略(登録実行) この結果以下のテキストがmysqlに登録されてます。 「\x00 \n \r \ \x1a」 エスケープ前の値と登録された値がなんら変わらなく見えるのですが気のせいでしょうか? ちなみにシングルクオテ―ションをダブルにすると以下のように登録されました。 「 \ ・」

    • ベストアンサー
    • PHP
  • pg_escape_stringとhtmlspecialcharsの記述の仕方について

    お世話になります。フォームで入力した値をpostでPHPに送ってます。 その際にセキュリティを考えてpg_escape_stringとhtmlspecialchars関数を使用したいのですが、簡単な記述方法が分かりません。 今現在は下記のようにしてます。 $tesuto=pg_escape_string(@$_POST["tesuto"]); $tesuto="'" .htmlspecialchars($tesuto) ."'"; フォームで入力する項目が20箇所あるので、これをスマートに 記述する方法は無いでしょうか?よろしくお願いします。

    • ベストアンサー
    • PHP
  • mysql_real_escape_string

    php mysqlです。 $row = $stt->fetch(PDO::FETCH_ASSOC); したあと、 $rowに入っているデータに対して、 mysql_real_escape_string 関数をかましたあとのデータに変更するにはどうすればいいのでしょうか? よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • mysql_real_escape_stringについて

    素朴な疑問です。。 SQLインジェクション?の対策でSQLにINSERT時にmysql_real_escape_stringを使っています。 「テスト\」というデータをINSERTをすると DBには「テスト\\」で入ります。 そのまま取り出してしまうと「テスト\\」で出力されるのですが。 このときの出力時の処理はstripslashes()を使っているのでしょうか? 他にもっと簡単な方法等があれば教えてくださいm(__)m

    • ベストアンサー
    • PHP
  • Sqliteで使えない文字。

    Sqlite3にて 列名やデータ内で使えない文字列(記号等の文字コード)を教えてください。 調べてみた情報では 改行や区切り文字などの基本的なことしか見つかりませんでしが 実際に使っていると、半角スペース等が混入している場合 全てではありませんが、データベース内で明らかに存在するのに検索できないなどの場合 があるようです。 一つずつ調べてエスケープ処理をすることは現実的に不可能なので 独自にエスケープ処理等を書かれている方に どのような文字列をエスケープしていますでしょうか?

専門家に質問してみよう