辦案筆記 | 偵探編號 03
後端核心動作鑑識
偵辦核心:每一頁都是全新出貨
-
生命週期
- 每一次切換到新檔案,對伺服器來說都是獨立且全新的出貨;主機不會記得上一頁發生過什麼。
- 因此每一支 PHP 都要在最前面親自
include "db_conn.php";(或同等寫法),重新開啟資料庫大門,拿到$pdo。
db_conn.php(資料庫連線檔)<?php $dsn = "mysql:host=localhost;charset=utf8;dbname=school"; $pdo = new PDO($dsn, "root", ""); ?>門打開之後,才進入下面兩種完全不同的偵辦方向。
在米花町的資料庫法庭中,處理表單資料時,主要分為兩個方向。一個是「建立新線索」,另一個是「核對既有證詞」:
1. 嫌疑犯註冊(members/02-api_register.php)
偵辦動作:「插進資料庫(新增)」
-
大腦思路
- 使用者是第一次來,資料庫裡面根本沒有這個人的資料。
- 打開資料庫後,要把他填的帳密「塞進去(INSERT)」,在
members資料表裡建立一筆全新的歷史紀錄。
破案 SQL 範例
INSERT INTO `members` (`members`.`account`, `members`.`password`) -- 指定資料表與欄位(表名欄位加反單引號、用點串接) VALUES ('{$_POST['account']}', '{$_POST['password']}'); -- 填入對齊的純文字值(外層加單引號、變數加大括號、結尾加分號)
2. 核心身分登入(members/04-api_login.php)
偵辦動作:「核對資料庫(查詢)」
-
大腦思路
- 這時候資料庫裡面已經有之前註冊好的資料了。
- 打開資料庫,不是要塞新東西,而是要把他現在輸入的帳密,拿去跟裡面已經存在的資料「對對看、數數看(SELECT COUNT)」,看能不能對得到人。
破案 SQL 範例
SELECT COUNT(*) -- 統計符合條件的資料總筆數(右手小拇指 shift + 中指 8) FROM `members` -- 從指定的資料表搜尋(表名欄位加反單引號) WHERE `members`.`account` = '{$_POST['account']}' AND `members`.`password` = '{$_POST['password']}'; -- 篩選符合帳密的線索(用點串接、結尾加分號)
一秒區分結論
註冊用 INSERT,資料庫裡還沒這個人,要「塞進去」。
登入用 SELECT COUNT(*),資料庫裡已有紀錄,要「對對看有沒有這一筆」。