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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数の前のビックリマークにつ...
-
エラー619が解決できません
-
MELSEC CPUとGOTの接続について
-
FTPで550エラーとなります
-
Chromecastでテレビにつなげて...
-
ノートパソコンとかパソコンを...
-
私の閲覧商品が家族のスマホに表示
-
RTX1200とL2TPクライアントの設...
-
wiiuは、ゲームパッドなしで初...
-
ISDN-TA(INSメイトV30Slim)につ...
-
BIG-IPに接続できません
-
マーケットスピードⅡの通信設定...
-
ジャパネットたかたのパソコン...
-
接続しすぎで電話代が・・・。
-
ワードパッドについて
-
TAとルーターの違い
-
ISDNへの接続方法
-
RealVncでリモート接続できません
-
インターネットを終わりにした...
-
タブレットのシステム更新後イ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数の前のビックリマークにつ...
-
MELSEC CPUとGOTの接続について
-
FTPで550エラーとなります
-
PSPでのインターネット接続...
-
DB2の接続エラー
-
インターネット接続状況確認の仕方
-
ウイルスソフトのマニュアル入...
-
BフレッツでのPPPoEの設定
-
PSPをネットに接続したいん...
-
INSメイトについて
-
接続不能状態:2
-
812SH USB接続について
-
光ファイバー100Mbpsが...
-
CDファイル *.cdaが再生でき...
-
LAN接続とダイヤルアップ接...
-
pdoの文字化け
-
エラー619が解決できません
-
ネットワクーキーを毎回聞いて...
-
接続時、「10分経過しました...
-
TAの接続、設定について
おすすめ情報