【PHP】MySQLとPDOとint型の取得について

PHPでPDOを使いMySQLのテーブルにアクセスした場合、int型カラムに対しSELECT文を実行すると、サーバーの環境により、int型として返すケースとstring型として返すケースの二通りがあり、WEBアプリ開発において混乱を招きます。

直感的には、int型カラムであるならば、int型を返して欲しいところなのですが、調べた限りでは、強制的にint型として返す手法は、無いようです。

もっとも、PDO::setAttributeの設定で、PDO::ATTR_EMULATE_PREPARESをfalseにすると副作用的にint型を返すのでこの手法が紹介されていることが多いようです。

//プレースホルダのエミュレート機能をオフにする。
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

しかし、この手法は本来、プリペアドステートメントのエミュレーションを有効または無効にするもので、int型を返すように強制するものではないと思います。

これに対し、string型に強制するようにするメソッドは定められています。

PDO::ATTR_STRINGIFY_FETCHES: フェッチする際、数値を文字列に変換する。boolを必要とする。

これがそうで、trueに設定するとMySQLのカラムの型がint型であっても、string型に変換されて返ってきます。

//int型カラムをstring型で返す
$dbh->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);

ところで、サーバーによって、ATTR_EMULATE_PREPARESによるint型への強制ができるかに違いがでることがあります。sakuraレンタルサーバーのスタンダードでは、int型として取得できますが、コアサーバーでは、int型への強制はできませんでした。

つまり、両サーバーで、このint型の扱いを統一しようとすると、ATTR_STRINGIFY_FETCHESの設定をtrueにして、string型で扱うのが最も簡単な方法のようです。int型に強制するメソッドが備えられていればそれが一番なのですが。

(注意)
その他の方法によってint型に統一できる可能性もあるので、必ずご自身でご確認ください。

カテゴリー: MySQL, PHP | コメントする

【書評】苦しんで覚えるC言語

苦しんで覚えるC言語 の書評です。

結論から言うと、C言語の基礎を掘り下げて、より深く理解するための入門書です。

■ 良い点
・ 基礎知識を掘り下げており、解説のレベルが深い
・ 英字の単語や構文の意味と読みが欄外で紹介されている
・ サンプルコードが短く簡単で理解しやすい
・ コードと実行結果が省略されずに示されている
・ 練習問題(読み取り・書き取り等)で理解が深まる

■ 悪い点
・ コードの具体例があまり実用的でない
・ 本の大きさが一般的でない

■ 総評
C言語の入門書のタイトルには、「やさしい」とか「簡単」あるいは、「サルでもわかる」といったフレーズが付けられることが多い中、本書は、その真逆をいく「苦しんで覚える」というキャッチコピーで一躍注目を集めた書籍です。

もっとも、「苦しんで覚える」というフレーズが文字通りかというとそうでもなく、著者が苦心してわかりやすく基礎の基礎から解説してくれているので、わかりやすい解説書となっています。実際、「Hello, world」を出力するまでに、60ページ以上も使用しています。

ただし、既にC言語を学習したものにとっては、いくらか冗長な解説も多いので、既習者は、配列やポインタの章から読むのでも十分だと思います。なお、個人的には、最後の方の章にある「動的配列」の理解が深まったのが大きな収穫です。

本書は、所々に難しい箇所もあるので、まったくのC言語入門者であるならば、「やさしいC 第4版 (「やさしい」シリーズ)」などでC言語の基礎を学習し、理解を深めるために、2冊目以降に本書を読むことをおすすめします。

苦しんで覚えるC言語

カテゴリー: BOOK, C | コメントする

【書評】新版C言語プログラミングレッスン 入門編

新版C言語プログラミングレッスン 入門編 の書評です。

結論から言うと、C言語の基礎から応用まで扱う、初中級レベルの入門書です

■ 良い点
・ 文章が丁寧で読みやすい
・ サンプルコードの質が高い
・ 動作結果がきちんと示される
・ 図表が理解を助ける。
・ クイズや読解演習、練習問題などが豊富で飽きさせない

■ 悪い点
・ 2006年の出版であり古い。
・ 後で解説する項目が前に来ることがある

■ 総評
プログラミング本でとても評価の高い結城浩氏によるC言語解説本です。結城氏ならではの、読みやすく分かりやすい文章が学習意欲を高めてくれます。

本のタイトルに「入門編」とありますが、C言語学習の一冊目にするには少しハードルが高いです。基礎から応用まで扱う、初中級レベルです。

C言語学習の最初の一冊目は、高橋麻奈さんの やさしいC 第4版 (「やさしい」シリーズ) が良いでしょう。そして、その次に本書を読めば効率的だと思います。なぜなら、結城氏による本書は、レベルが低いところから丁寧に解説が進みますが、読解演習など、比較的レベルの高い箇所もあり、全くの初心者では躓く可能性があるからです。また、後で解説する項目が前に来ることがあるので、ある程度の知識はあった方が良いからです。

もっとも、C言語の解説本の中では、わかりやすく質の高い本の部類であることは確かなので、C言語に取り組むならオススメの一冊です。読解演習や練習問題のコードを実際に打ち込み実行すれば相当な力がつくはずです。

新版C言語プログラミングレッスン 入門編

カテゴリー: BOOK, C | コメントする

コアサーバーのMINIとさくらのスタンダードを使ってみての感想と比較

ここ数年ほど、サイトの運営に、コアサーバーを利用してきましたが、アクセス数が増加してきたので、安定感に定評のある、さくらのレンタルサーバを契約し実際に利用してみました。

そこで、さくらのレンタルサーバー(スタンダード・プラン)とGMOグループのコアサーバー(MINI・プラン)の比較検討を行ってみたいと思います。

なぜ、さくらのスタンダードとCORE-MINIを比較するのかというと、PHP+MySQLを使えるのがこれらのプランからであり、自分にとって両機能がサーバーを借りるにあたっての必須条件だからです。

(公式ページ)
・ さくらのレンタルサーバ
・ コアサーバー

それでは、両者を比較検討していきます。なお、比較は記号(>、=、<)で表示します。

【使用感】

■ 安定性
[さくらのスタンダード > CORE-MINI]

安定的にページを表示するのは、さくらのスタンダードです。
さくらのサーバーでは、サーバーのリソースが、少数のユーザーに独占されないよう、個々のユーザーに絶対的な制限を設けています。そのため、サーバーのレスポンスに好不調があまりありません。
これに対して、コアサーバーでは、相対的な制限が設けられており、少数のユーザーが多数のリソースを使用してしまう状況がありえます。それがひどいと自分のサイトのレスポンスまで不調になってしまいます。
つまり、サーバー内の同居ユーザーの影響を受けにくいのがさくらで、受けやすいのがコアサーバーといえます。

■ 表示速度
[さくらのスタンダード = CORE-MINI]

ページの表示速度は、ほぼ同じです。
PHP+MySQLでサイトを構成している場合、ほんの少しばかり、CORE-MINIの方が早いのですが、その差は微々たるものです。0.025秒と0.035秒とかの差です。基本的に、どちらも満足できる表示スピードです。ただし、CORE-MINIの方は、サーバーが不安定になると表示速度も遅くなるため注意が必要です。

■ 同時接続数の上限
[さくらのスタンダード < CORE-MINI]

同時接続数とは、その名のとおり、同時にどれだけのアクセス(リクエスト)をさばけるかの数値です。つまり、並列してどれだけのリクエストを処理できるかの数値です。
この数値が高いのは、CORE-MINIの方です。
安定性の項でも書きましたが、コアサーバーは相対的な資源管理となっています。そのため、同時接続数が多くなってきた場合でも、上限までは、それに対応してレスポンスを返してくれます。
これに対して、さくらのスタンダードでは、リソースに絶対的な制限がかけられているため、アクセスが集中すると、同時接続数の制限にかかり、いわゆる「503エラー」という混雑を示すエラーを表示するようになります。ただし、3日間限定でリソース制限の緩和機能(リソースブースト)があります。

■ ページビューの上限
[さくらのスタンダード < CORE-MINI]

より多くのページビューを表示できるのは、CORE-MINIの方です。
前述の通り、コアサーバーは相対的な資源管理となっていて、同時接続数の制限も緩いので、アクセス集中にも耐えて、ページビューを伸ばすことが可能です。サイトによっては、1日に20万ページビュー前後まで表示が可能です。
これに対して、さくらのスタンダードでは、同時接続数の制限がネックとなり、アクセス数を伸ばすことが難しくなります。だいたい、1日に10万ページビューを超えるあたりから、アクセス集中時に、503エラーが頻発するようになります。ただし、リソースブーストを使用した場合、20万ページビュー前後まで表示することができました。

(公式ページ)
・ さくらのレンタルサーバ
・ コアサーバー

【機能面】

■ CPUの性能
[さくらのスタンダード > CORE-MINI]

CPUの性能が良いと感じたのは、さくらのスタンダードです。
約700万件のレコードを持つ500Mbほどあるデータベースのテーブルの列を削除する処理で、エラーを出さずに処理してくれたのは、さくらのスタンダードです。データベースの削除処理は高負荷なのですが、さくらでは2分ほどの短時間で処理ができました。
これに対して、CORE-MINIでは、処理時間が二倍ほどかかった上、結局、処理しきれずに、Kill(中断)されてエラーとなりました。

■ ファイルマネージャー
[さくらのスタンダード < CORE-MINI]

ファイルマネージャーの使いかってが良いのは、CORE-MINIです。
CORE-MINIでは、ファイルマネージャーで、ユーザーの所有するファイルをすべて管理できます。公開領域より上の、非公開領域のファイルにもファイルマネージャーでアクセスできます。
これに対して、さくらのスタンダードでは、非公開領域のファイルにファイルマネージャーでアクセスできません。アクセスできるのが、www以下の公開領域に限定されています。これは何気に不便ですので改善を要求したいところです。

■ データベース構成
[さくらのスタンダード > CORE-MINI]

データベースの構成が良いのは、さくらのスタンダードです。
一般に、WEBサーバーとDBサーバーは、別サーバーにあった方が良いと言われています。別であれば、各サーバーがそれぞれの役割に専念できるからです。こうした別構成になっているは、さくらのスタンダードです。
これに対して、CORE-MINIでは、localhost、つまり、同一サーバーにDBサーバーが存在しています。一見、I/Oは、こちらの方が良さそうですが、別構成の方がよいそうです。

なお、データベース容量について、さくらのスタンダードは500Mbが一応の目安とされています。CORE-MINIについては、公式の目安はなく、500Mbを超えても大丈夫なようです。ただ、600Mbを超えるようになるとmysqldumpに失敗することがあるので、少ないに越したことはないでしょう。

■ アクセス解析
[さくらのスタンダード < CORE-MINI]

アクセス解析の使いかってが良いのは、CORE-MINIの方です。
CORE-MINIは、アクセス解析にAnalogを利用しています。Analogは、日別の詳細情報を見ることができ、細かな情報まで取得できます。
これに対し、さくらのスタンダードは、Webalizerを利用しています。Webalizerは、グラフィックは綺麗なのですが、月別の統計情報が多く、日別の細かな情報までは見ることができません。

■ SSH接続機能
[さくらのスタンダード = CORE-MINI]

SSH接続機能とは、ファイルマネージャではなく、TeraTermなどのSSHクライアントを用いて、コマンドによりサーバーを操作できる機能をいいます。この機能については両サーバーに一長一短があります。
CORE-MINIでは、比較的多くのコマンドを制限なく使うことができます。しかし、接続するのに事前にホスト情報を登録する必要があり少し面倒です。
これに対し、さくらのスタンダードでは、すぐに接続が可能なのですが、実行できるコマンドが制限されています。
個人的には使いやすいのはCORE-MINIですが、ほぼ同等といってよいでしょう。

(公式ページ)
・ さくらのレンタルサーバ
・ コアサーバー

【固有の機能】

■ サーバー間移動
[さくらのスタンダード < CORE-MINI]

サーバー間移動ができるのは、CORE-MINIです。
サーバー間移動とは、ユーザーが利用するサーバーに不調があったときに、別の番号のサーバーに移動できる機能をいいます。これには、ファイル等を一括して移動できる機能も含みます。CORE-MINIは、比較的不安定な状態になりやすいのですが、この機能により他のサーバーへ移動することが可能です。
これに対し、さくらのスタンダードでは、この機能はありません。そもそも比較的安定しているので、この機能がなくても問題ないのかもしれません。

■ リソースブースト機能
[さくらのスタンダード > CORE-MINI]

リソースブースト機能があるのは、さくらのスタンダードです。
リソースブースト機能とは、何かの拍子にサイトが注目を集め、一時的にアクセス数が急増した場合に、リソースの制限を緩和する機能です。つまり、一時的にではありますが、この機能をONにすることにより、ページビューを伸ばすことが可能となります。
これに対して、CORE-MINIでは、リソースブースト機能はありません。そもそも相対的なリソース管理なので、サーバーのリソースに余裕があればそれだけアクセスをさばくことが可能です。

■ サポート
[さくらのスタンダード > CORE-MINI]

サポートがよいのはさくらのスタンダードです。
さくらのサーバーでは、メール以外に、電話によるサポートも用意されています。
これに対して、コアサーバーでは、メールやフォーラムでのやりとりが中心となります。

(公式ページ)
・ さくらのレンタルサーバ
・ コアサーバー

【価格面】

■ 料金
[さくらのスタンダード < CORE-MINI]

料金が安いのは、CORE-MINIです。
CORE-MINIは、月額約250円ほどで、さくらのスタンダードのおよそ半額です。
これに対して、さくらのスタンダードは、月額500円ほどでCORE-MINIのおよそ2倍です。
コアサーバーでは、初期費用が無料の場合がありますが、さくらのレンタルサーバーでは、初期費用がたいていかかります。

【まとめ】

■ 総括
さくらのスタンダードとCORE-MINIには、それぞれ一長一短があります。あえて例えるなら次のような感じです。
さくらのスタンダードは、「温室育ちでおとなしい子」に向いている感じです。
これに対して、CORE-MINIは、「雑草魂でわんぱくな子」に向いている感じがします。

どちらのサーバーもユーザーの好き勝手には出来ないのですが、制限が厳しいのがさくらのサーバーで、制限が比較的緩いのが、コアサーバーといった感じです。

どちらも、無料利用期間があるので、両者の使いかってを確かめてから利用を開始するのがおすすめです。
なお、最新の詳細は公式ページをご確認ください。

・ さくらのレンタルサーバ


・ コアサーバー


カテゴリー: WEB, XREA/CORESERVER | コメントする

【書評】基本がわかる安全設計のWebシステム

基本がわかる安全設計のWebシステム の書評です。

結論から言うと、非プログラマ向けの、言語に依存しない、Webセキュリティ要点本です。

■ 良い点
・ プログラミングの知識がなくても要点がつかめる
・ 必須知識のほぼ全般を押さえられる
・ 読みやすく短時間で読了できる
・ 「まとめ」がよくまとまっている

■ 悪い点
・ 開発者には若干物足りない

■ 総評
本書は、Webシステムのセキュリティに関する本ですが、開発者向けというよりも、発注者やプロジェクト・マネージャーといった、プログラミングの知識があまり無い、非プログラマー向けのセキュリティ解説書となっています。

プログラマー向けには、いわゆる徳丸本が有名ですが、徳丸本は難しくてよくわからないという人に本書はおすすめです。もっとも、プログラマーであるならば、本書の内容は必須知識であり、セキュリティの学習の総復習にはちょうどよい感じです。短時間でおさらいができます。

【徳丸本】 体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践

なお、非プログラマー向けであることから、特定のプログラミング言語での解説はほぼ無くて、具体的なコードはでてきません。言語に依存しない解説となっています。

個人的に本書が役に立ったのは、「クリック・ジャッキング」に詳しい所や、セッションの扱い、ログの扱い、WEBにかかるインフラについての記述などです。徳丸本以外の有用な情報もあるので、セキュリティに関心があるならば、一度、本書に目を通すとよいと思います。

基本がわかる安全設計のWebシステム

カテゴリー: BOOK, セキュリティ, プログラミング全般 | コメントする