× 無料のユーザー登録をすると学習状況を管理することができるようになります

【旧版】PHP入門(応用編) (全12回)

最新版のレッスンはこちらから » 【最新版】PHP入門 (全30回) / PHPデータベース入門 (全13回)

PHPをさらに使いこなすためのさまざまな機能について説明していきます。

このレッスンでは php 5.3.13 / mysql 5.5.25 を使用しています。

#01 データベースに接続してみよう
1356日前
■ Exception (例外) とは

このレッスンに登場したように、プログラミング言語には「Exception (例外)」という「異常な事態を上位のプログラムに伝えるための機構」が備わっているものが多いです。

レッスンで説明しているように、 $dbh = new PDO( ... ); の部分では、データベースに接続できないといったエラーが発生したときに PDOException という例外が発生します。

■ try ... catch とは

その例外の発生を検知するために try ... catch という構文が必要になります。

もし try ... catch を使わずに書くと、例外が発生した時にそれを補足できず、「Uncaught Exception ...」つまり「Exception (例外) が catch されなかった」という致命的なエラーが発生し、プログラムが異常終了しまいます。(いきなり画面が真っ白、とか。)

そのような事態にならないよう、例外が発生する可能性のある処理に対しては、きちんと try ... catch 構文を使ってエラー処理をおこなう必要があるのです。
#02 データを全件表示してみよう
860日前
PDOで接続する際に、動かしているサーバーによっては文字化けを起こす場合があります。
その場合は接続時に「charset=utf8;」を指定してあげてください。
より具体的には、
new PDO('mysql:host=localhost;dbname=blog_app','dbuser001','dbpwd0001')
を次のように書き換えます。
new PDO('mysql:host=localhost;dbname=blog_app;charset=utf8;','dbuser001','dbpwd0001')
1375日前
今回紹介した処理の部分は以下のように書き換えることができます。
【書き方その1】
$sql = "select * from users";
$stmt = $dbh->query($sql);
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $user) {
    var_dump($user['name']);
}
【書き方その2】
$sql = "select * from users";
foreach ($dbh->query($sql) as $user) {
    var_dump($user['name']);
}
【書き方その2】の方がわかりやすかったですね...苦笑。
以下のマニュアルにもあるとおり、query()の利点は実行結果をそのままループで回せる点なので覚えておくと良いでしょう。
http://php.net/manual/ja/pdo.query.php
#05 データの更新・削除をしてみよう
1334日前
なお、PDOでデバッグする際には、エラーメッセージを表示させる次の命令が便利です。
var_dump($stmt->errorInfo());
PDO::errorInfoの詳細については以下を参照してください。
var_dump($stmt->errorInfo());
#07 セッションを使ってみよう
1335日前
セッションを使うと、ブラウザにはセッション用のCookieが「PHPSESSID」という名前でセットされます。(名前は session_name() という関数で設定もできます。Cookieの値には推測困難な文字列が設定されます。)

サーバーはそのセッションCookieの値を元に、現在どのブラウザ(クライアント)とやり取りしているかを判別します。

ですので、ブラウザ側でCookieが無効になっているとセッションが利用できない、ということを覚えておきましょう。
#09 クラスを使ってみよう (2)
472日前
動画内で sayHi() の呼び出し時に「echo $tom->sayHi();」のように echo を使っていますが、sayHi() 内で echo を書いているため呼び出し時には不要でした。 (ユーザーの方よりご指摘いただきました。ご指摘感謝です!)
$tom->sayHi();
$bob->sayHi();