・リンク先で下記のように書かれているのですが、SET NAMESは使わない方が良いでしょうか?
・SET CHARACTER SETなら良いでしょうか?
・.cnfを使用しない場合は、直接指定も可?
>SET NAMES だとMySQLサーバには charset が伝わるけれどクライアント側は latin1 のままなのでエスケープ処理で問題が出る可能性があります
http://qiita.com/ngyuki/items/d88a4df860abb51eb714
No.3ベストアンサー
- 回答日時:
以前にも貼ったと思いますがもう一度w
http://qiita.com/mpyw/items/b00b72c5c95aac573b71 …
5.3.5より古いバージョンを使っていること自体にもう問題があるといっても過言ではないですね。最新リビジョンの5.3.29に更新すべきです。というよりも根本的にマイナーバージョンで見て、5.3系のサポートは切れているので使うべきではありません。5.4以降を使いましょう。5.6または5.5がおすすめです。
ここからは記事の内容と重複しますが一応…
・「SET NAMES」「SET CHARACTER SET」を使ってもデフォルトの「latin1→UTF-8」のケースではエスケープ漏れが発生することはありません。ngyukiさんが心配されていますが問題ありません。但し、ソースからビルドしている場合で、コンパイルオプションにてデフォルトの文字セットを「cp932(Shift_JIS)」に変更している場合は脆弱性となります。
・「SET NAMES」はMySQLに送る文字列にのみ作用しますが、「SET CHARACTER SET」は送る文字列に加え送られてくる文字列にも作用します。処理が重めになるので使わない方がいいです。
回答ありがとうございました。
>5.3.5より古いバージョンを使っていること自体にもう問題があるといっても過言ではないですね
・あまり意識していなかったのですが、5.3ってそういう扱いなんですね
・古いバージョンを使用し続ける理由もないので、(先ずは)PHP5.4へ上げました
・いつかはバージョンアップしなければいけないと思っていたので、いい機会になりましたー
No.4
- 回答日時:
一つ重要なことを書き忘れました。
PDO::ATTR_EMULATE_PREPARES
このオプションをFalseに設定している場合は先ほど危険と説明したケースにおいても安全です。デフォルトはTrueなのでご注意を。
No.1
- 回答日時:
phpスクリプト側の話ですよね(MySQLサーバ側の設定は不問とします)。
わざわざset namesやset character set を使う意味はありません。php5.3.6以降でPDO接続を使うなら、DSNで指定するべきです。
http://www.php.net/manual/ja/ref.pdo-mysql.conne …
MySQLiならmysqli_set_charsetですね。
http://www.php.net/manual/ja/mysqli.set-charset. …
#ネイティブなMySQL関数はすでに非推奨なので割愛ww
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPにおいて16進数のアスキー文...
-
form の TEXT で " がはいる...
-
文字列を%+2桁のヘキサ
-
onedrive にexcelファイルをア...
-
MySQLのベースに書かれたプログ...
-
フォントの色を変えるには?
-
トランザクションが原因?DBに...
-
PHPのif文でその処理を途中で抜...
-
透過PNGが透過されない!!
-
違法アップロードについて
-
BASP21メール送信(SMTP-AUTH認...
-
データベースにアクセスして結...
-
Subversionで、ファイルをリネ...
-
VBA 添付ファイルをつけてメー...
-
.phpファイルが、表示されない
-
ドラッグアンドドロップで画像...
-
phpのextension_dirを複数指定...
-
MySQLとPHPで日本語が文字化け...
-
mb_convert_encoding で?になる。
-
php.ini を設定を変更すると再...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php文字列中のシングルクオート...
-
is_callable()の第二引数の使い方
-
文字列を大文字の2桁ごとのコン...
-
PHPでカンマ区切り文字列を数値...
-
if ('0.0'=='0'){ の0.0とは何
-
ヒアドキュメントについて質問です
-
$_POSTのデータ
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
PHPのif文でその処理を途中で抜...
-
別ファイルの変数を呼び出した...
-
CFileDialogの最初のディレクト...
-
.phpと.incファイルの違いはな...
-
FTPコマンドでディレクトリごと...
-
バッチを用いたフォルダの自動移動
-
・オブジェクト指向のメリット...
-
透過PNGが透過されない!!
-
VBSの「MsgBox」について
-
[php初心者]サイトを見てデータ...
-
「@$変数」の「@の意味は?」
おすすめ情報