PHP基礎学習
Chapter7. データベースアクセス
Webアプリでは、HTMLフォームに入力されたデータをサーバーに保存し必要に応じて出力します。
例えば、会員登録フォームでは会員情報を入力させ、管理ページでは登録した会員リストを表示します。 このとき、入力されたデータはRDB(リレーショナルデータベース)という
データ構造で保存しますが、本章ではこのRDBの基本構造と取り扱いについて学習します。
Webアプリでは、HTMLフォームに入力されたデータをサーバーに保存し必要に応じて出力します。
例えば、会員登録フォームでは会員情報を入力させ、管理ページでは登録した会員リストを表示します。 このとき、入力されたデータはRDB(リレーショナルデータベース)という
データ構造で保存しますが、本章ではこのRDBの基本構造と取り扱いについて学習します。
Insert Into t_customer(CID, name, tel) Values(1, '鈴木', '080-0000-1111');
Insert Into t_customer(CID, name, tel) Values(2, '田中', '080-0000-2222');
Update t_customer Set name = 'スズキ', tel = '080-0000-1234' Where (CID = 1);
Delete From t_customer Where (CID = 1) Limit 1;
Select * From t_customer Where (CID = 1);
Select name, tel From t_customer Where (CID = 1);
Select CID, name, tel From t_customer Where (tel Like '080%');
Select o.*, c.CID, c.name From t_order As o Left Join t_customer As c On (o.CID = c.CID)
Where (o.tm_order >= '2021/10/11');
$dac = new DAC(Lib::connection(), "mysql");
try {
$dac->open();
$dac->command = "Insert Into t_customer(CID, name, tel) Values({$_POST["CID"]}, '{$_POST["name"]}', '{$_POST["tel"]}');";
$dac->execute();
$this->response("", true);
} catch (Exception $ex) {
$this->response($ex->getMessage(), false);
}
$dac = new DAC(Lib::connection(), "mysql");
try {
$dac->open();
$dac->command = "Update t_customer Set name = '{$_POST["name"]}', tel = '{$_POST["tel"]}' Where (CID = {$_POST["CID"]});";
$dac->execute();
$this->response("", true);
} catch (Exception $ex) {
$this->response($ex->getMessage(), false);
}
$dac = new DAC(Lib::connection(), "mysql");
try {
$dac->open();
// note: CIDの該当する行数を数える
$dac->setColumn("Count(*)");
$dac->setOption("CID = [0]", $_POST["CID"]);
$count = $dac->scalar("t_customer", true);
// note: 挿入および更新データをセットする
$dac->clear();
$dac->setData("name", $_POST["name"]);
$dac->setData("tel", $_POST["tel"]);
// note: 結果が1件以上の場合には更新クエリを実行
if ($count) {
$dac->setOption("CID = [0]", $_POST["CID"]);
$dac->update("t_customer", 1);
} else {
$CID = $dac->setSequence("t_customer_seq");
$dac->setData("CID", $CID);
$dac->insert("t_customer");
}
$this->response("", true);
} catch (Exception $ex) {
$this->response($ex->getMessage(), false);
}
$dac = new DAC(Lib::connection(), "mysql");
try {
$dac->open();
$dac->setOption("tel Like '080%'");
$dac->setColumn("CID, name, tel");
$rows = $dac->select("t_customer");
} catch (Exception $ex) {
$this->errors["message"] = $ex->getMessage();
} finally {
$dac->close();
}
foreach ($rows as $row) {
$html.= "<tr>";
$html.= " <td>{$row["name"]}</td>";
$html.= " <td>{$row["tel"]}</td>";
$html.= " <td><button class="detail" data-cid="{$row["CID"]}">詳細<button></td>";
$html.= "</tr>";
}
$this->values["html"] = $html;
> | 大きい |
< | 小さい |
>= | 大きい、もしくは等しい |
<= | 小さい、もしくは等しい |
!= <> | 等しくない |
() AND () | 左右の両方の条件に一致 |
() OR () | 左右どちらかの条件に一致 |
NOT () | 括弧内の条件に一致しない |
BETWEEN a AND b | a と b の範囲内 |
IN ('文字列1', '文字列2', '文字列3') IN (1, 2, 3) | カンマ区切りのデータに一致 |
LIKE '文字列%' LIKE '%文字列' LIKE '%文字列%' | 前方一致 後方一致 前後方一致 |
日付選択 | AとBの範囲を指定する |
チェックボックス | 複数のデータに一致させる |
ラジオボタン、セレクトボックス | 単一のデータに一致させる |
文字列 | 前後方に一致させる |
$dac = new DAC(Lib::connection(), "mysql");
try {
$dac->open();
// note: AとBの範囲を指定する
$tmStart = strtotime($_POST["tm_start"]);
$tmEnd = strtotime("+1 day", strtotime($_POST["tm_start"]));
$dac->setOption("(tm_entry >= [0]) And (tm_entry < [1])", date("Y-m-d", $tmStart), date("Y-m-d", $tmEnd));
// note: 複数のデータに一致させる
$csv = implode("','", $_POST["pref"]);
$dac->setOption("pref In ('{$csv}')");
// note: 単一のデータに一致させる
$dac->setOption("gen = [0]", $_POST["gen"]);
// note: 前後方に一致させる
$dac->setOption("(name LIke '%{$_POST["name"]}%') Or ((kana LIke '%{$_POST["name"]}%'))");
$dac->setColumn("*");
$rows = $dac->select("t_customer");
} catch (Exception $ex) {
$this->errors["message"] = $ex->getMessage();
} finally {
$dac->close();
}
Select * From t_customer
Where ((tm_entry >= '2021/10/01') And (tm_entry < '2021/11/01'))
And (pref In ('東京都', '神奈川県', '埼玉県', '千葉県'))
And (gen = '1')
And ((name Like '%鈴木%') Or (kana Like '%鈴木%'))
$dac = new DAC(Lib::connection(), "mysql");
$pager = new Pager();
$pager->limit = 100;
$pager->page = ($_GET["page"]) ? $_GET["page"] : 1;
$dac->setColumn("CID, name, tel");
$dac->selectPageRows("t_customer", $rows, $pager) or $this->errors["message"] = $dac->message;
foreach ($rows as $row) {
$html.= "<tr>";
$html.= " <td>{$row["name"]}</td>";
$html.= " <td>{$row["tel"]}</td>";
$html.= " <td><button class="detail" data-cid="{$row["CID"]}">詳細<button></td>";
$html.= "</tr>";
}
$this->values["html"] = $html;
$this->pager = $pager;
<table>
<thead>
<tr>
<td>氏名</td>
<td>TEL</td>
<td></td>
</tr>
</thead>
<tbody>
<?= $page->values["html"] ?>
</tbody>
</table>
<div class="pager">
<?= $page->pager->getUL() ?>
</div>