12,964
回編集
(→概要) |
|||
132行目: | 132行目: | ||
<br><br> | <br><br> | ||
== | == データベースの接続 == | ||
PDOクラスのインスタンスを作成することにより、接続が確立される。<br> | PDOクラスのインスタンスを作成することにより、接続が確立される。<br> | ||
コンストラクタには、データソース(DSN)、ユーザ名、パスワードを指定する。<br> | コンストラクタには、データソース(DSN)、ユーザ名、パスワードを指定する。<br> | ||
<br> | <br> | ||
データベース接続時になんらかのエラーが発生した場合、<code>PDOException</code>クラスがスローされる。<br> | データベース接続時になんらかのエラーが発生した場合、<code>PDOException</code>クラスがスローされる。<br> | ||
エラー処理を行う場合はこの例外をキャッチする。<br> | エラー処理を行う場合はこの例外をキャッチする。<br> | ||
159行目: | 158行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
* データソース名 | * データソース名(Data Source Name) | ||
*: データベースに接続するために必要な情報。 | |||
*: PHP Manualに各データベースに応じたDSNの記述方法が掲載されている。 | *: PHP Manualに各データベースに応じたDSNの記述方法が掲載されている。 | ||
*: 先頭にデータベースの種類を指定して、<code>:</code>(コロン)で区切る。 | *: 先頭にデータベースの種類を指定して、<code>:</code>(コロン)で区切る。 | ||
*: 各項目は、<code>項目名=値</code>として、<code>;</code>(セミコロン)で区切る。 | *: 各項目は、<code>項目名=値</code>として、<code>;</code>(セミコロン)で区切る。 | ||
*: <br> | |||
*: 以下の例は、MySQLにおけるデータソース名の記述方法である。(ポート番号は省略可能) | |||
*: <code>mysql:dbname=<データベース名>;host=<ホスト名またはIPアドレス>:port=<ポート番号>;charset=<文字コード></code> | |||
*: 例. <code>mysql:dbname=SampleDB;host=localhost:port=3306;charset=utf8mb4</code> | |||
*: <br> | *: <br> | ||
** dbname | ** dbname | ||
251行目: | 252行目: | ||
try | try | ||
{ | { | ||
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, | $dbh = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', $user, $pass, | ||
[ | [ | ||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, | PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, | ||
273行目: | 274行目: | ||
?> | ?> | ||
// | // Webブラウザにheader関数以降に表示するHTMLがUTF-8で記述されていることを認識させる | ||
// | // または、header関数の代わりに<meta charset="utf-8">を記述する | ||
// 両方記述してもよい | |||
header('Content-Type: text/html; charset=utf-8'); | header('Content-Type: text/html; charset=utf-8'); | ||
292行目: | 294行目: | ||
<u>データベースに接続できない場合等は、Warningが発生する。</u><br> | <u>データベースに接続できない場合等は、Warningが発生する。</u><br> | ||
<u>もし、データベースを動的に指定する場合、<code>set_error_handler</code>関数を使用して<code>ErrorException</code>に変換した後、例外処理を行う。</u><br> | <u>もし、データベースを動的に指定する場合、<code>set_error_handler</code>関数を使用して<code>ErrorException</code>に変換した後、例外処理を行う。</u><br> | ||
<br> | <br><br> | ||
== | == データベースの持続的な接続 == | ||
<code>PDO::ATTR_PERSISTENT</code>オプションの値は、string型の値が設定されない限り、bool型(持続的な接続の有無を示す)に変換される。<br> | <code>PDO::ATTR_PERSISTENT</code>オプションの値は、string型の値が設定されない限り、bool型(持続的な接続の有無を示す)に変換される。<br> | ||
string型の値を設定する場合、複数の接続プールを使用することができる。<br> | string型の値を設定する場合、複数の接続プールを使用することができる。<br> | ||
329行目: | 316行目: | ||
<?php | <?php | ||
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(PDO::ATTR_PERSISTENT => true)); | $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(PDO::ATTR_PERSISTENT => true)); | ||
?> | |||
</syntaxhighlight> | |||
<br><br> | |||
== データベースの切断 == | |||
データベースの接続は、PHPスクリプトが終了しても閉じられずにキャッシュされ、他のPHPスクリプトが同じ内容の接続を要求する時に再利用される。<br> | |||
このキャッシュにより、新しい接続を確立するオーバーヘッドを避けることができるため、Webアプリケーションを高速化できるようになる。<br> | |||
<syntaxhighlight lang="php"> | |||
<?php | |||
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); | |||
$sth = $dbh->query('SELECT * FROM foo'); | |||
// 使用を終了したので、閉じます | |||
$sth = null; | |||
$dbh = null; | |||
?> | ?> | ||
</syntaxhighlight> | </syntaxhighlight> |