ブログ

  • 【書評】初体験MySQL 丸の内とら(著)

    初体験MySQL 丸の内とら(著)の書評です。

    この本は、前半でMySQLの基礎を、後半でMySQLとPHPの連携を解説しています。

    良い点

    • ワンステップずつの解説で分かりやすい
    • 実行例→構文→結果画面の順で説明が一貫している
    • WEBアプリの開発手順を学べる
    • サンプルコードのダウンロード可

    悪い点

    • テーブルの結合の説明が薄い
    • 正規化の説明がほとんど無い

    総評

    この本は、『初体験』のタイトル通り、基礎事項の説明に重点がおかれています。MySQL、および、PHPともに初心者である人に向いている書籍です。

    PHPを学習していて、初めてMySQLに取り掛かる人が読むなら、理解が深まる一冊といえるでしょう。

    ただ、そうした性質上、中級者以上の人には物足りないかもしれません。

    後半では、PHP+MySQLを使った簡単なアプリ作成を通して、アプリ開発手法の解説もしています。この辺は、アプリ作成初心者にとって参考になります。

    アプリのコードは本には記載されておらず、ダウンロードする必要があります。
    自分は印刷して本とともに読んでみました。基礎の学習に向いているサンプルです。

    ちなみに、この本では、開発環境として、『VertrigoServ』というパッケージを使用しています。他の多くの本では、XAMPPを使用しているのですが、違った開発環境があるのを知っておくのもよいかもしれません。

    初体験MySQL

  • 【書評】独習PHP 第2版

    独習PHP 第2版 山田祥寛(著) の書評です。

    良い点

    • サンプルコードをダウンロード可能
    • セキュリティについて1章を設けている
    • 文法について詳しい

    悪い点

    • PHPの環境構築はXAMPPでなく、個別インストール
    • サンプルアプリの作成は無し
    • 文法について細かすぎる
    • 白黒の1色刷り

    総評

    この本は、『独習』シリーズのPHP本です。

    『独習』というタイトルですが、特別に独学に向いているという本ではありません。普通のPHP入門本と思ってよいでしょう。

    内容的には、PHPの文法に重点が置かれています。この点は、少し細かすぎる印象も受けます。組み込み関数の章などは、リファレンスとして使えそうなくらいになっています。

    その他、HTTPの解説にも重点がおかれています。ieHTTPHeadersといったツールを使って、どのようにHTTP通信が行われているかも解説しています。

    ちなみに、山田氏の書籍の例に漏れず、この『独習PHP』も、全般的にオブジェクト指向になっています。

    たとえば、データベースの解説はMySQLベースながら、抽象化レイヤーであるPDOを用いた解説になっています。この点では、素のMySQLの解説を期待した人には向かないかもしれません。

    その他、オブジェクト指向の解説に1章を用いて比較的丁寧な解説がなされています。

    ただ、PHP本の1章だけでオブジェクト指向を理解するのは困難なので、本質を理解したいなら、C++やJavaの簡単な入門書を2、3冊読むのをお勧めします。

    ところで、この本は、山田氏の著作・監修の類書である、『10日でおぼえるPHP5入門教室』や『基礎PHP』などと内容的に一部重複しています。

    入門者なら、『10日でおぼえるPHP5入門教室』の方が、ちょっとしたサンプルアプリを作りながらの解説なので、いくらか楽しく読めると思います。『独習PHP』は白黒で文法書的なので取っ付きにくい印象を受けます。

    独習PHP 第2版

  • 【書評】はじめて学ぶ MySQL

    はじめて学ぶ MySQL 玉川純(著)の書評です。

    良い点

    • 基礎の基礎から解説
    • 図や表が多用され分かりやすい
    • 図や表でテーブルの変化を逐一表示
    • 正規化を具体例を出して解説

    悪い点

    • トランザクションの解説は無い

    総評

    『はじめて学ぶ』とタイトルにあるように、初心者向けのMySQLの本です。

    SQLの操作に対して、データがどの様に動いてテーブルが変化するのかを、図表を用いて丁寧に解説しています。

    内容は初心者向きながらも、所々で、運用上の注意点なども述べられていて参考になります。

    whereとhavingの違いなど混乱しがちな点も分かりやすく解説されています。

    MySQL本の一冊目として適していると思います。

    はじめて学ぶ MySQL

  • 【書評】よくわかるPHPの教科書

    よくわかるPHPの教科書 たにぐち まこと(著)の書評です。

    2010年に発売されたPHPの本の中で、最高レベルの評価を得た本の一冊といっても良いのではないでしょうか。

    良い点

    • オールカラーで見やすく、かつ、読みやすい
    • サンプルコード→ポイント→追加解説と構成が一貫している
    • サンプルコードが実用的
    • PHP、MySQL、アプリ、この3つの構成のバランスが良い

    悪い点

    • あえて言えば環境構築が大まか
    • データベース接続にPDOを使っていない

    総評

    基礎部分のPHPの解説は、フォームとの連携を意識しており実用的になっています。基礎が実用的に述べられているかわりに、オブジェクト指向などは、取り入れられていません。基本的に、関数ベースのプログラミング解説となっています。

    データベースは、MySQLを扱っています。その中でも、phpMyAdminを使った解説が多く、初心者にもわかりやすくなっています。

    初心者では、テーブルの結合のあたりで混乱しがちですが、この本では、結合についても理解しやすく解説されています。

    ログイン機能やページング処理などのWEB必須機能もきちんと取り上げられているのもポイントが高いです。

    amazonをざっと見た感じでも評価が高いのですが、その理由は、基礎的なPHP(関数ベース)で、MySQLネイティブなことが、初心者に受けているのだと思います。

    初心者なら読んでおきたい本の一冊です。

    (後記:「よくわかるPHPの教科書」は、データベース接続にPDOを使っていないため、現在では、非推奨とします。)

    よくわかるPHPの教科書

  • 【バグ修正】よくわかるPHPの教科書 「Twitter風ひとこと掲示板」の不具合

    PHPの入門本として評価の高い『よくわかるPHPの教科書』ですが、サンプルアプリの「Twitter風ひとこと掲示板」にバグと思われる箇所があるのでメモしておきます。(2010/12/27現在)

    ルートディレクトリに設置する、index.phpファイルをアップロードして表示しようとするとエラーになります。

    エラーの内容は、以下の通りです。

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘-5, 5’ at line 1

    このエラーの原因になるのは、index.phpファイルの40行目から52行目にかけてです。

    修正前 index.php

    // 最終ページを取得する
    $sql = 'SELECT COUNT(*) AS cnt FROM posts';
    $recordSet = mysql_query($sql);
    $table = mysql_fetch_assoc($recordSet);
    $maxPage = ceil($table['cnt'] / 5);
    $page = min($page, $maxPage);
    
    $start = ($page - 1) * 5;
    
    $sql = sprintf('SELECT m.name, m.picture, p.* FROM members m, posts p WHERE m.id=p.member_id ORDER BY p.created DESC LIMIT %s, 5',
     $start
    );
    $posts = mysql_query($sql) or die(mysql_error());

     修正後 index.php

    // 最終ページを取得する
    $sql = 'SELECT COUNT(*) AS cnt FROM posts';
    $recordSet = mysql_query($sql);
    $table = mysql_fetch_assoc($recordSet);
    $maxPage = ceil($table['cnt'] / 5);
    $page = min($page, $maxPage);
    //バグ修正のため挿入
    if ($page < 1) {
     $page = 1;
    }
    $start = ($page - 1) * 5;
    
    $sql = sprintf('SELECT m.name, m.picture, p.* FROM members m, posts p WHERE m.id=p.member_id ORDER BY p.created DESC LIMIT %s, 5',
     $start
    );

    上の赤字の部分を追加するとバグが修正されます。

    バグの原因は、緑字の部分にあります。

    $maxPage = ceil($table[‘cnt’] / 5);

    となっていますが、データベースを作りたてで、データを一件も保存していないと、このエラーになります。

    なぜかというと、データが一件も無い場合には、$table[‘cnt’] はゼロになります。ゼロを5で割って切り上げてもゼロです。

    そして、次の文ですが、

    $page = min($page, $maxPage);

    $maxPageには、ゼロが入っているので、$pageにはゼロが入ります。
    それを受ける次の文ですが、

    $start = ($page – 1) * 5;

    この文の結果として、$start には、-5 が入ってしまいます。
    なぜなら、(0-1)*5イコール-5 だからです。

    データが一件でも入っていれば、0が入るのですが、一件も入っていないので、マイナス5という当該データベースでは扱えない値がSQLにセットされてしまうのです。

    その結果が、最初にあげたエラーです。

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘-5, 5′ at line 1

    マイナス5というありえない値をセットしてしまっているのでエラーになるわけです。

    そこで、$page がゼロ(または、1より少ない)の場合に、1に戻してあげる処理を追加してあげると上手くいきます。

    if ($page < 1) {
     $page = 1;
    }

    上記の文を追加してあげると、マイナス5となっていたのが、ゼロとなり、正常なSQL文を構成できるようになります。

    ただし、このエラーが出るのは、サンプルアプリをダウンロードしてゼロから構築した場合です。つまり、テキストの順に従って、一つずつファイルを作ったなら、その過程でデータを入れる処理があるため、エラーになりません。