コンテンツにスキップ

SQLパッケージ@PHP

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. SQLパッケージ

SQLを抽象化するAPIをアプリケーションに提供する。

SQLの種類が異なっていても、共通のロジックでクエリを送信できる。

php_sql_package

02. PDO

PDOとは


フェッチ

▼ フェッチとは

読み出したレコードをに一度に全て取得してしまうと、サーバー側のメモリを圧迫してしまう。

そこで、少しずつ取得する。

▼ フェッチのメソッド名に関する注意点

注意点として、FETCH関数は、ベンダーによって名前が異なっていることがある。

そのため、同じ名前でも同じ分だけレコードを取得するとは限らない。


読み出し

prepareメソッド

プリペアードステートメントを使用してSQLを定義する。

fetchメソッド

読み出された全てのレコードのうち、最初のレコードの全てのカラムを取得し、一次元の連想配列で返却する。

fetchAllメソッド

読み出された全てのレコードの、全てのカラムを取得し、二次元の連想配列で返却する。

*実装例*

<?php

$sql = "SELECT * FROM doraemon_characters";
$stmt = $dbh->prepare($sql); // プリペアードステートメントを定義。
$stmt->execute(); // 実行。


// 全てのレコードを取得する。
$data = $stmt->fetchAll();

// 出力
print_r($data);

// カラム名と値の連想配列として取得できる。
// Array
// (
//     [0] => Array
//     (
//         [id] => 1
//         [name] => のび太
//         [gender] => man
//         [type] => human
//     )
//     [1] => Array
//     (
//         [id] => 2
//         [name] => ドラえもん
//         [gender] => man
//         [type] => robot
//     )
// )

fetchColumnメソッド

読み出された全てのレコードのうち、最初のレコードの一番左のカラムのみを取得し、混合型で返却する。

主に、COUNT関数の場合に使用する

*実装例*

<?php

$sql = "SELECT { カラム名 }OUNT(*) FROM doraemon_characters";
$stmt = $dbh->prepare($sql); // プリペアードステートメントを定義。
$stmt->execute(); // 実行。

// レコードを取得する。
$data = $stmt->fetchColumn();

// 出力
print_r($data);

// 10 (件)


書き込み

INSERT

<?php

// $_POSTを使用して、送信されたpostメソッドのリクエストを受け取り、属性から各値を取得する。
$staff_name = $_POST["name"];
$staff_pass = $_POST["pass"];


// HTMLとして変数の内容を出力する際、『<』『>』などの特殊文字をエスケープ (無害化)
$staff_name = htmlspecialchars($staff_name, ENT_QUOTES, "UTF-8");
$staff_pass = htmlspecialchars($staff_pass, ENT_QUOTES, "UTF-8");


// DBと接続 (イコールの間にスペースを入れるとエラーになってしまう)
$dsn = "mysql:dbname=kizukeba_pronami_php;
host=kizukebapronamiphp
charaset=UTF-8";
$user = "root";
$password = "";
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);


// 列名と値を指定してINSERT
$sql="INSERT INTO mst_staff (name,password) VALUES (?,?)";
$stmt = $dbh->prepare($sql);


// 配列に値を格納 (格納する値の順番と、SQLでの引数の順番は、合わせる必要がある)
$data[] = $staff_name;
$data[] = $staff_pass;


// SQLを実行
$stmt->execute($data);


// DBとの接続を切断
$dbh = null;

UPDATE

記入中...

DELETE

記入中...