http://www.ajaxray.com/blog/2009/08/29/simple-ph …
を利用しpdo接続をしています。そのまま使用すると日本語が文字化けしていまいます。
※ファイルの文字コードはUTF-8に変更してます。
function setConnectionInfo内に以下のソースを入れてみたのですがエラーになってしまいました。
どのようにすればエラーなく動作させる事ができるのでしょうか?
$this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->query("SET NAMES 'utf8'");
self::$_pdoObject = null;
また、調べてみた際に気になったのですがこのスクリプトのエントリー的なページはあっても
使用しての感想等のページはありませんでした。操作はかなり楽にできそうな感じなのですが
あまり使われてないのでしょうか?
メジャーに知られているようなラッパーなどがありましたら是非おしえてください!
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
先に詰め込むか、実行時に詰め込むかの違いでしょう。
そうしたところにまで気をつける姿勢をお持ちなのですからこそ、このようなラッパークラスを利用せず、PDOをそのまま使うべきです。どこで何をしているのかはっきりしている方が、気分がいいじゃないですか!
本当はMDB2を使っています。しかし、文字セットを設定するメソッドでは相変わらず「SET NAMES」を発行しているので、お勧めは出来ません。
どうしてもPDOで無ければならない理由があるならまだしも、安全第一、文字化け無しのストレスフリーを目指すなら、やっぱりMySQL改良版拡張モジュール(MySQLi)がいいですよ。
こちらも勉強になりました。ありがとうございます。
参考URL:http://www.php.net/manual/ja/pdostatement.execut …
No.2
- 回答日時:
例えば、MySQLの設定ファイルに以下のようなクライアントセクションがあったとします。
[client]
port=3306
default-character-set=utf8
ファイルのパスは「PATH_TO_MY_INI」に定義されているものとして考えたとき、大体こんな感じです。これで接続の文字セット設定が完了し、エスケープ関連メソッドも正常に機能することになります。
require_once 'PHP-PDO-Wrapper/Db.php';
Db::setConnectionInfo('basecamp', 'dbuser', 'password');
Db::setDriverOptions(array(
PDO::MYSQL_ATTR_READ_DEFAULT_FILE => PATH_TO_MY_INI,
PDO::MYSQL_ATTR_READ_DEFAULT_GROUP => 'client',
));
PDOオブジェクトの操作は、ラッパークラスが用意するゲッターメソッド経由で行うことが出来るようです。
Db::getPDOObject()->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
後は目的に応じてクエリを発行すれば、適切なタイミングで接続してくれるようです。
実体は「PDO::prepare()」ですので、バインドパラメータは適宜エスケープされるはずです。
しかし、正直な感想ですが、これを使うことで得られる便利さがよくわかりませんでした。ことMySQLへの接続では、PDOを利用するよりMySQL改良版拡張モジュールをそのまま利用するほうが便利です。文字セットの設定を変更するために専用メソッドが準備されており、接続後でも安全に文字セットを変更することが出来ます。
参考URL:http://www.php.net/manual/ja/mysqli.set-charset. …
この回答への補足
度々のお返事本当にありがとうございます。やっと意味が理解できました^^
使用するきっかけは、マニュアルに載ってる通りで書くと1ページ内で複数問い合わせをする場合に
同じようなソースを書かなくてはならずこれを利用すれば単調なソースを書くことなくすっきりできるのでは?
と思ったからです。
自分でラッパークラスを作れればいいのですがそれもできないので探していたところこのクラスをみつけました。
原文が英語で理解できなかったので他のものもないかと探してみたのですが見つける事ができなかったのが現状です。
理解しようと読み解いていたところ気になったのですがプリペアは使っているようなのですが値を
バインドしている箇所(bindValueやbindParam)が見当たらないのですがセキュリティ的には不安なものでしょうか?
No.1
- 回答日時:
PDOを利用してMySQLへ接続する場合、PDOインスタンスを生成する際、ドライバ固有のオプションを指定することで接続の文字コードを操作することが出来ます。
接続後はこれを操作するメソッドなどが用意されておりませんので、PDOを使う限りは必須の手順となります。件のラッパークラスをご利用でしたら、接続情報を設定し、ドライバオプションを設定した後データベースへの問い合わせをすることで上手く動作することでしょう。MySQLの設定ファイルに直接アクセスできない場合や、編集する権限が無い場合は、自分で用意した設定ファイルを読み込むように指定してください。
属性の設定は、ラッパークラスに用意されているPDOオブジェクトのゲッターメソッド経由で行うのがわかりやすいと思います。
こちらのラッパークラスは初めて知りました。
参考URL:http://www.php.net/manual/ja/ref.pdo-mysql.php
この回答への補足
お返事ありがとうございます。
どのように組み込めばいいものか方法がわからないのですが具体的に教えていただけないでしょうか?
宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- PHP PHPSpreadsheetによる書き出し時のページネーション方法について 1 2023/03/20 10:35
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数の前のビックリマークにつ...
-
インターネット接続状況確認の仕方
-
Chromecastでテレビにつなげて...
-
私の閲覧商品が家族のスマホに表示
-
BIG-IPに接続できません
-
Outlookは海外では使えない?
-
マーケットスピードⅡの通信設定...
-
ノートパソコンとかパソコンを...
-
RTX1200とL2TPクライアントの設...
-
Wi-Fiを繋ぐとインターネットと...
-
Wi-Fi 突然 繋がらない。
-
BHR-4GRV で PPTP サーバー構築
-
パソコンの電源プランについて
-
DSNサーバ(61.122....
-
ストレートケーブルとクロスケ...
-
パソコンの設定について
-
DSUとTAの間の「終端抵抗」の...
-
ルーターの接続時間
-
ISDNから光へ移行後のIS...
-
ChromecastでYouTubeが突然見れ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数の前のビックリマークにつ...
-
MELSEC CPUとGOTの接続について
-
PSPでのインターネット接続...
-
[Delphi] Socketのエラーを抑制...
-
DB2の接続エラー
-
エラー619が解決できません
-
LAN接続とダイヤルアップ接...
-
インターネットで高額料金請求...
-
ネットワクーキーを毎回聞いて...
-
SetPointでBluetoothマウスの接...
-
INSメイトについて
-
インターネット接続状況確認の仕方
-
FTPで550エラーとなります
-
P-in+携帯電話で接続できません
-
シリアルコンソール接続でヤマ...
-
新しいPCへのISDN接続設定
-
IE5.5でページを表示できません
-
メールに付いてくるURLに接続出...
-
今朝からYahooに接続できません
-
ONUとAirMac Extremeで接続
おすすめ情報