phpからデータベースにアクセスするには2通りの方法がある。
- DB固有の拡張モジュールを直接使う
- PDOのようなDBに依存しないライブラリを使う
初心者の自分は一旦深く考えず、PDOによる方法を選択した。
1.DB設定(接続準備)
$dsn = 'mysql:host=000.000.000.000;dbname=hoge';
$username = 'hoge_usr';
$password = 'hoge_pass';
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);
$db = new PDO($dsn, $username, $password, $options);
-
host=
の後ろの、000.000.000.000
は各自読み替えること -
000.000.000.000
のところは、「ホスト名」or「IPアドレス」
2.SQL文実行
具体例見たほうが速いので。
(例1)select文実行
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
$stmt = $db->prepare('select rank, article_id, tweets from table_name',
array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
} else {
die("このアプリケーションは mysql でしか動作しません。代わりに \$stmt->fetchAll() を使用すべきです");
}
$stmt->execute(); //SQL文実行
$array = array();
while ($row = $stmt->fetch()) { //SQL文実行結果を上から1行ずつ$rowに代入
$array[] = array('rank' => $row['rank'], 'article_id' => $row['article_id'], 'tweets' => $row['tweets']);
}
$stmt = null; //おまじない
- 2行目でSQL文記述
-
table_name
などSQL文は各自読み替えること -
.
は文字列連結 - while文の中の変数名も各自読み替えること
-
$array
にはSQL文の実行結果(連想配列のインデックス配列)が格納される -
$row
のkey(rank
、article_id
、tweets
)にはDBのカラム名を書く
(例2)update文実行
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
$stmt = $db->prepare('update table_name set contents = ' . $contents . ', title = ' . $title . ' where ID = ' . 1,
array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
} else {
die("このアプリケーションは mysql でしか動作しません。代わりに \$stmt->fetchAll() を使用すべきです");
}
$stmt->execute(); //SQL文実行
$stmt = null; //おまじない
- 2行目でSQL文記述
-
table_name
などSQL文は各自読み替えること -
.
は文字列連結 - update文で複数カラムを変更→
,
つなぎでOK