註冊

辦案筆記 | 偵探編號 03

後端核心動作鑑識

偵辦核心:每一頁都是全新出貨

  1. 生命週期

    • 每一次切換到新檔案,對伺服器來說都是獨立且全新的出貨;主機不會記得上一頁發生過什麼。
    • 因此每一支 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

偵辦動作:「插進資料庫(新增)」

  1. 大腦思路

    • 使用者是第一次來,資料庫裡面根本沒有這個人的資料。
    • 打開資料庫後,要把他填的帳密「塞進去(INSERT)」,在 members 資料表裡建立一筆全新的歷史紀錄。

    破案 SQL 範例

    INSERT INTO `members` (`members`.`account`, `members`.`password`) -- 指定資料表與欄位(表名欄位加反單引號、用點串接)
    VALUES ('{$_POST['account']}', '{$_POST['password']}'); -- 填入對齊的純文字值(外層加單引號、變數加大括號、結尾加分號)

2. 核心身分登入(members/04-api_login.php

偵辦動作:「核對資料庫(查詢)」

  1. 大腦思路

    • 這時候資料庫裡面已經有之前註冊好的資料了。
    • 打開資料庫,不是要塞新東西,而是要把他現在輸入的帳密,拿去跟裡面已經存在的資料「對對看、數數看(SELECT COUNT)」,看能不能對得到人。

    破案 SQL 範例

    SELECT COUNT(*) -- 統計符合條件的資料總筆數(右手小拇指 shift + 中指 8)
    FROM `members` -- 從指定的資料表搜尋(表名欄位加反單引號)
    WHERE `members`.`account` = '{$_POST['account']}' AND `members`.`password` = '{$_POST['password']}'; -- 篩選符合帳密的線索(用點串接、結尾加分號)

一秒區分結論

註冊用 INSERT,資料庫裡還沒這個人,要「塞進去」。

登入用 SELECT COUNT(*),資料庫裡已有紀錄,要「對對看有沒有這一筆」。