• 締切済み

TEXTテーブルに¥が格納できない

PHP5+MySQL5です。 ブラウザのフォームで入力されたデータを、PHPでMySQLに格納しています。 いろいろ調べてみたのですが解決できませんでした。 下記3点について教えてください。 ・半角の円マークが勝手に消える >>半角円マークを含む文字列をINSERTしても、円マーク以外の文字しか格納されません。SQL文には円マークが含まれていますので、MySQLの仕様なのか?と思っています。どうすれば半角円マークを格納できるのでしょうか? ・半角円マークと半角tがタブに変わる >>半角で「¥t」が含まれた文字列をINSERTすると、「¥t」の部分がタブに変わってしまいます。どうすれば半角の「¥t」を格納できるのでしょうか? ちなみに、以下のようにマジッククオートの処理をした後、INSERTしています。 if (get_magic_quotes_gpc()) { $hoge = stripslashes($_POST['hoge']); } else { $hoge = $_POST['hoge']; } ・他にもMySQLで扱えない文字や文字列があるのでしょうか? よろしくお願いします。

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

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>ということは、stripslashesの処理が不要ということになりそうですね。 magic_quotes_gpcのon/offに頼らないためにはstripslashesは残しておいて、mysql-real-escape-stringを通す方がいいかもしれません。 http://www.php.net/manual/ja/function.mysql-real-escape-string.php

ka-kichi
質問者

お礼

ご回答ありがとうございます。 これまでとは逆に、 if (get_magic_quotes_gpc()) { $hoge = $_POST['hoge']; } else { $hoge = addslashes($_POST['hoge']); } としてみたところ、「¥」と「¥t」に関しては、意図した結果になりました。 ご提示いただいた方法ですと、 if (get_magic_quotes_gpc()) { $hoge = stripslashes($_POST['hoge']); } else { $hoge = $_POST['hoge']; } $hoge = mysql_real_escape_string($hoge); $sql = "INSERT INTO `table` (`field`) VALUES('$hoge')"; という流れでいいのでしょうか? 参考URLの「Example#3 "うまいやり方" のクエリ」を見たのですが理解できず、自分なりに上記コードを考えてみました。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

「\」は正規表現に使うエスケープ文字で、 ご指摘の通り、\tはタブを意味します。 \そのものを取り扱いたい場合は、\\と表記します。 というわけで、正規表現として、扱われていると推測します。 http://www.uri.sakura.ne.jp/~cosmic/yuno/lab/regex_3escape.html 一度お試しください。

ka-kichi
質問者

お礼

すばやいご回答ありがとうございます。 ということは、stripslashesの処理が不要ということになりそうですね。 stripslashesの処理をはずして試してみます。

関連するQ&A

  • PHP+MySQLでエスケープされたデータを格納したい。

    php.iniの設定でmagic_quotes_gpc = Offにして、 mysql_real_escape_stringで出力エスケープしたデータを MySQLに格納するとバックスラッシュが格納されない。 エスケープされたデータを格納したいです。 php.iniの設定 --------------------------------------------------------- ; Magic quotes for incoming GET/POST/Cookie data. ; magic_quotes_gpc = On magic_quotes_gpc = Off ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. magic_quotes_runtime = Off ; Use Sybase-style magic quotes (escape ' with '' instead of '). magic_quotes_sybase = Off --------------------------------------------------------- $_POST['us_fname']には「'user'」という文字列が格納されています。 --------------------------------------------------------- $clean['us_fname'] = $_POST['us_fname']; $mysql['us_fname'] = mysql_real_escape_string($clean['us_fname']); $sql = "insert into table ( us_fname ) values ( '".$mysql['us_fname']."', ) "; --------------------------------------------------------- echo $mysql['us_fname']; で確認すると「\"user\" 」となっているんですが、 MySQLの中を確認すると「'user'」のままでシングルクォートがエスケープされていません。

    • ベストアンサー
    • PHP
  • 改行コードが半角スペースになってしまいます

    もしかしたらカテゴリはphpかも知れません。 よろしくお願いします。 phpとMySQLでWEBアプリを作っています。html上のtextareaフォームに入力した文字列を、phpを使ってMySQLにINSERTします。この文字列には改行(CRLF)も含まれます。 それをSELECTで参照し表示させると、改行が半角スペースに変換されてしまいます。 phpMyAdminで見てみるとちゃんと改行が入っています。 つまり、格納の段階ではちゃんと改行コードが入っているんですが、取り出すときに変換されてしまうようです。 この場合、どのように対処すればいいのでしょうか?

    • ベストアンサー
    • MySQL
  • mysqlに格納したエクセルファイルの、シート内の文字列を検索したいの

    mysqlに格納したエクセルファイルの、シート内の文字列を検索したいのですが上手くいきません。 半角英数の文字列なら、以下のSQL文で引っ張ってくることができました。 SELECT * FROM テーブル名 WHERE 列名 LIKE '%abc%'; mysqlのバージョンは5.1です。 検索はPHPで行おうと思っています。 どなたか知っている方いらっしゃいましたら、よろしくお願いします。

  • 画像の格納

    mysqlに画像を格納してPHPで表示させようとしてるんですが、うまくいきません。下記のような文字列が延々と表示されます。 ????? JFIF? ?H?H?????C?$;'$!!$I47+;VL[YULS どうしてこうなるのでしょうか?

  • データベース(MySQL)にNULLとして格納

    下記サイトを参考にサイト上からデータベース(MySQL)のテーブルにレコードを追加できるようにしました。 http://ponk.jp/php/basic/php_mysql#page_index3 レコードの追加自体はできたのですが、テキストフィールドに何も記述されていない場合にNULLとして追加したいと思っているのですが、その方法が分かりません。 コードは次のようにしました。 $number = isset($_POST["number"]) ? $_POST["number"] : 'NULL'; $st = $pdo->prepare("INSERT INTO player(number) VALUES(?)"); $st->execute(array($number)); このコードで追加をすると、NULLではなく空白が格納されてしまいます。 どこを修正すればNULLとして格納できるようになるでしょうか? ご存知の方いらっしゃいましたらご教示ください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • mysqlで長さ無制限の文字列を格納することはできますか?

    mysqlを用いて掲示板を作りたいです。その際に、簡素化のため、掲示板の全てのデータをmysqlに格納したいと思っています。 また、掲示板における本文の部分は、文字列の長さを無制限にするのが妥当だと思います。 しかし、mysqlのマニュアル(http://dev.mysql.com/doc/mysql/ja/BLOB.html)によると、一番大きい型であるLONGBLOB型の記憶容量は 2^32バイトとなっており、それを超える文字列は切り捨てられるとなっています。 そこで、ご教授いただきたいです。 長さ無制限の文字列をmysqlに格納する方法はありますか?そしてその場合はどうすればよいですか? それとも、長さ無制限の文字列をmysqlに格納する方法ははなく、その場合は別ファイルを用意し、そちらに書き込むなどをする必要がありますか? どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHP preg_match_all関数の配列をMysqlに格納したい

    PHP preg_match_all関数の配列をMysqlに格納したい PHP初心者です。 preg_march_all関数を使って正規表現でマッチングする練習を行っています。 preg_march_allを使った場合、マッチングした結果が多次元配列となって出力されると思うのですが、それらをそれぞれのレコードに分けてMysqlに格納したいと思っています。 php入門サイトのものを弄って作ったのですが、 while (! feof($fp)) { $s = fgets($fp); $n = preg_match_all($Pattern, $s, $ar, PREG_SET_ORDER); for ($i = 0; $i < $n; $i++) mysql_query("insert into seikihyougen1 (benri) value ('$ar[$i][2]')"); } 結果はマッチングした数のレコード分、benriカラムにArray[2]という文字列が入力されてしまいます。 これらをマッチングした文字列に直してMysqlに入れるにはどうすればよいのでしょうか?

    • ベストアンサー
    • PHP
  • エクセルをMysqlに格納

    いつもお世話になっております。 Linux,mysql,PHP,apacheの環境で試しているのですが、 エクセルデータをアップロードし、MysqlのBLOB型に格納したいと思っております。また、格納したMysqlのエクセルデータをダウンロードできる流れを考えております。 テンポラリファイルをそのままINSERTするとデータは格納されるのですが、抽出したときに文字化けしてしまいます。 エンコード方法など何か指定するのかと思うのですが 調べたのですが見つかりませんでした。 内部エンコードはEUCになっています。 説明不足な点があるかと思いますが、ご教授お願いします。 /*insert時*/ $localfile = file_get_contents($_FILES['userfile']['tmp_name']); $sql = "INSERT INTO TABLE (fileup) VALUES '".$localfile ."'"; /*ダウンロード時*/ header("Content-type: application/vnd.ms-excel"); header("Content-Disposition: inline; filename=\"".date('Ymd')."list.xls\""); echo $binary;//selectで抽出した時のデータ

    • 締切済み
    • PHP
  • 変数格納  クォーテーション「あり」「なし」の違い

    変数格納する際、クォーテーション「あり」「なし」の違いはあるのでしょうか? ■質問背景 ・配列作成する際、クォーテーション「なし」でできたのに、取り出す際はクォーテーション付与しないとうまくいかなかった ・具体的には、"id" => '1', と変更したらうまくいった array(   0 => array     (       "id" => 1,       "city" => "tokyo"     ), ■質問 ・下記の違いは何でしょうか? ・文字列として格納するか数値として格納するかの違い? $hoge = 1; $hoge = '1'; $hoge = "1"; ・クォーテーションなしで変数に格納出来るのは数値だけ? $hoge = 文字列;

    • ベストアンサー
    • PHP
  • 【php】改行にエスケープ文字が入る

    phpで  $_GET['a'] = stripslashes($_GET['a']); $_GET['a'] = mysql_real_escape_string($_GET['a']); $_GET['a'] → インサート と途中に stripslashes mysql_real_escape_string をはさんでから GETやPOSTを取得してるんですが改行が改行コードに変わってしまいます。 例えば質問フォームとかで  ---------------------------------------- 質問内容 ---------------------------------------- なんたら かんたら  ↓ サブミット ---------------------------------------- 投稿確認 ---------------------------------------- なんたら\n\rかんたら みたいなかんじです。 一旦文字コードをEUCにかえてから mysql_real_escape_stringを挟んだりしたりもしてみてますが 改行が改行コードになってしまいます。

    • ベストアンサー
    • PHP