初心者のWEBデザイン

HTML,CSS、その他WEBデザインに関する事を記述していきます.

PHP DB接続 健忘録

まずはDBに接続します。

下記に従って正常に接続できていない場合には、真っ白かエラーになります。
エラーにならなければ、正常に接続できてます。

  $dns = "mysql:dbname=テーブル名;host=ホスト名";
  $username = "phpmyadminのユーザ名";
  $password = "phpmyadminのユーザ名";
  try {
      $pdo = new PDO($dns, $username, $password,
      array(
        PDO::ATTR_EMULATE_PREPARES => false //静的プレースホルダ設定
      ));//静的か動的かを選択。静的の方がセキリティ高し

  } catch (PDOException $e) {
    // エラーが発生した場合は「500 Internal Server Error」でテキストとして表示して終了する
    // - もし手抜きしたくない場合は普通にHTMLの表示を継続する
    // - ここではエラー内容を表示しているが, 実際の商用環境ではログファイルに記録して, Webブラウザには出さないほうが望ましい
    return $e->getMessage();
  }
次にSQL文を作成します。
$sql = "INSERT INTO mail_form (カラム名) VALUES (:val)";
$stmt = $pdo->prepare($sql);

VALUES後の:valはプレースホルダと言います。

プリペアステートメント = 命令文を準備する
SQLをPDOオブジェクトのメソット
SQL文を実行する際に:valと入力したい値を紐付けを行います。

静的プレースホルダは、データベース側でバインドでします。
動的プレースホルダは、バインドしてからデータベース側へ命令文を渡します。
動的プレースホルダの方がSQLインジェクションを許してしまう可能性が上がるので、セキュリティ上は静的プレースホルダが好ましい。

値をバインドする
$cat = "ねこ";
$stmt->bindParam(":val",$cat, PDO::PARAM_STR);
//こうすることでSQL文は
//$sql = "INSERT INTO mail_form (カラム名) VALUES ('ねこ')";
//となる
bindParam(パラメータID,バインドする値(変数),データ型)
実行する
$stmt->execute();
Select文でDBから値を引っ張る場合(一次元配列)

これだと複数の行は取得できない

//SQL文をPDOオブジェクトにセットして変数に代入
$stmt = $pdo->prepare($sql);
//SQL文を実行
$stmt->execute();
//ステートメントを取り出し、結果を変数に代入
$result = $stmt->fetch();
//結果を表示
var_dump($result)
//もしくは
  foreach ($result as $row => $v) {
    echo $result[$row];
  }


Select文でDBから複数の値を引っ張ってループさせる場合(多次元配列)
複数の行を取得する場合

//SQL文をPDOオブジェクトにセットして変数に代入
$stmt = $pdo->prepare($sql);
//SQL文を代入
$stmt->execute();
//ステートメントを取り出し、結果を変数に代入
$result = $stmt->fetchALL(PDO::FETCH_ASSOC);
  foreach ($result as $row ) {
    echo $row['カラム名'] . '<br>';
  }