LoginSignup
9
8

More than 5 years have passed since last update.

[PHP]MySQLへの接続

Posted at

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(rankarticle_idtweets)には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
9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8