註冊

辦案筆記 | 偵探編號 01

疑點重重的標點符號

在 PHP 與 SQL 的世界裡,這些標點符號就是我們偵辦案件時的「核心密碼與破案規則」。在後端主機執行時,哪怕只是解錯一個符號或漏掉一條線索,整個系統就會直接發出致命警報(Fatal Error),導致破案失敗。

為了不讓主機發出錯誤警報,我們必須將 these 關鍵符號分成「PHP 偵辦組」與「SQL 資料庫組」兩大陣營,徹底釐清它們的唯一專門用途:

第一組:PHP 偵辦防線

這是你在編寫 members/01-register.htmlmembers/02-api_register.php 時,絕對不能搞混的關鍵符號:

  1. 鑑識成功

    "雙引號

    唯一專門用途:框住字串,並啟動內部變數解析。

    鑑識報告:最高統治者,它統治了整行程式碼(從 insert into 一路到最尾巴)。只要用雙引號包起來的SQL字串,主機在讀取時,如果發現裡面藏著 $ 變數,就會自動把變數拆開、將裡面的資料翻譯出來。

    鍵位指法:左 小拇指 Shift + 右 小拇指 右1

    程式碼筆記

    //$sql = "INSERT INTO ...VALUES (...)";
    //雙引號"必須一路包到底,直到最末端)";
  2. 鑑識成功

    ()小括號

    唯一專門用途:執行動作(函式)的發動開關。

    鑑識報告:只要看到英文單字後面緊貼著一對小括號 (),這個單字百分之百是一個「動作」(例如 print_r()exec())。小括號就是啟動按鈕,並且負責把執行需要的原料塞在括號裡面。

    鍵位指法:左手 小指 Shift + 右手 無名指與小指 上2

  3. 鑑識成功

    {}大括號

    唯一專門用途:在雙引號的大字串裡,把變數精準框起來。

    鑑識報告:像在寫 SQL 那串長長的雙引號 "" 字串時,裡面密密麻麻都是字。如果直接寫 $sql = "VALUES ($_POST['account'])",電腦會分不清楚哪裡是字、哪裡是變數。這時候用 {}{$_POST['account']} 緊緊包住,就是專門跟電腦劃清界線:「報告!大括號中間包著的這隻是一隻完整的 PHP 麥克風,請先把它裡面的字傳過來,不要跟外面的字搞混!」

    鍵位指法:左手 小指 Shift + 右手 小指 上1 右1&右2

  4. 鑑識成功

    $錢字號 / Dollar Sign

    唯一專門用途:宣告變數。

    鑑識報告:這是 PHP 變數的專屬身分證。在 PHP 裡面,只要看到這個符號,就代表後面那個字是一個「用來裝資料的特製箱子」。不管是 $pdo(連線箱)、$sql(字條箱),還是系統自帶的 $_POST(表單大包裹),開頭一定必加 $

    鍵位指法:右 小拇指 Shift + 左 食指 上2

  5. 鑑識成功

    []中括號

    唯一專門用途:陣列(Array)的指定鑰匙。

    鑑識報告:當你手上拿著一個大包裹箱子(陣列)時,你不能直接把整箱倒出來,你必須用中括號指定裡面的名字。例如 $_POST['account'],這對中括號就是專門用來綁架 'account' 這個標籤的。

    鍵位指法:右手 小指 右1 上1&2

  6. 鑑識成功

    ;分號

    唯一專門用途:程式碼的句點。

    鑑識報告:這是你設定的嚴格規範!PHP 的每一行指令結束,一律要按下這個分號 ;。這是在跟主機講:「這一個動作我做完了,你可以看下一行了。」少寫一個,整頁直接當機。

    鍵位指法:右手 小指

  7. 鑑識成功

    ->物件箭頭 / Object Operator

    唯一專門用途:呼叫物件內部的動作或變數。

    鑑識報告:這是一個指向目標的指揮棒。當我們用 $pdo 連上資料庫之後,$pdo 就變成了一個功能強大的特製物件。這時候用 ->exec(),就是用箭頭指著它大喊:「請發動你裡面的執行指令動作,把大字條轟進資料庫!」它是啟動連線物件核心功能的專屬鑰匙。

    鍵位指法:右手 小指 上2右1,接 左手 小指 Shift + 右手 無名指下1

  8. 鑑識成功

    :(冒號)

    唯一專門用途:資料庫連線驅動(DSN)的專屬分隔符。

    鑑識報告:這是連線設定的關鍵密碼。在建立 $dsn 字串時,冒號是用來跟主機劃清界線的生死線,前面宣告驅動類型(例如 mysql),後面緊跟著主機與資料庫名稱(例如 host=localhost;dbname=school)。少寫這個冒號,PDO 就會完全迷路,直接發出致命連線警報。

    鍵位指法:右 小拇指 右1

  9. 鑑識成功

    //單行註解

    唯一專門用途:寫給人看的單行筆記。

    鑑識報告:這是給偵探自己看的機密備忘錄。在 PHP 裡面,只要看到 //,後面那一整行的文字主機就會完全裝作沒看到、直接跳過不執行。專門用來記錄當下的辦案思維或步驟說明。

    鍵位指法:右手 小指 下1 連按兩次

  10. 鑑識成功

    /* */多行註解

    唯一專門用途:寫給人看的大範圍多行筆記。

    鑑識報告:當筆記太長、跨了好幾行時,單行註解就不夠用了。用 /* 當作起點,*/ 當作終點,中間包住的所有代碼和文字都會被主機冷凍封印。除了寫大筆記,也很適合用來暫時隱藏一大段懷疑有 Bug 的程式碼。

    鍵位指法:右手 小指 下1 & 左手 小指 Shift + 右手 中指 上2,反之亦然

  11. 鑑識成功

    .點號

    唯一專門用途:字串連接符(Concatenation)。

    鑑識報告:在 PHP 裡,點號是用來把兩個字串(或是字串與變數)硬生生串在一起的專屬膠帶。

    鍵位指法:右 無名指 下滑 1

  12. 鑑識成功

    =等號

    唯一專門用途:賦值運算子(Assignment)。

    鑑識報告:在 PHP 裡面,這不是數學的等於!它是「把右邊的線索塞進左邊箱子」的動作。例如 $sql = "SELECT...",就是把右邊那串長長的字條,通通塞進左邊的 $sql 箱子裡裝好。

    鍵位指法:右小指 · 上2 右3

第二組:SQL 資料庫法庭

當資料準備透過 PDO 移送至 MySQL 資料庫時,法庭有它自己一套嚴格的「審查規則」。為了符合最高破案規格,這裡必須嚴格遵守以下線索配置:

  1. 鑑識成功

    '單引號

    唯一專門用途:框住純文字的「值」。

    鑑識報告:它是寫給資料庫看的,用來宣告「等一下塞進這格的名字是一串文字」。例如:'{$_POST['account']}'。因為雙引號才是老大,所以這個單引號 ' ' 必須乖乖被包在雙引號的肚子裡面。

    鍵位指法:右手 小指 右1

  2. 鑑識成功

    `反單引號 / Backtick

    唯一專門用途:包覆資料表名稱與欄位名稱。

    鑑識報告:只要在 SQL 指令裡面提到資料庫裡的表格名稱(例如 `members`)或是欄位名稱(例如 `account``password`),一律要用這對反單引號包起來。這是為了跟電腦防呆。避免取名剛好跟 SQL 的內建指令(例如 namedate)撞名。

    鍵位指法:左手 小指 上2左1

  3. 鑑識成功

    ()小括號

    唯一專門用途:SQL 的對齊桶。

    鑑識報告:當它寫在 SQL 的 VALUES 後面時,則是專門用來把資料群組起來、像拉鍊一樣一對一對齊欄位用的。

    鍵位指法:左手 小指 Shift + 右手 無名指與小指 上2

  4. 鑑識成功

    ;分號

    唯一專門用途:語句結尾。

    鑑識報告:這是 SQL 結案的法槌,每執行完一整行指令,結尾必加分號,代表這條線索審查完畢。

    鍵位指法:右手 小指

  5. 鑑識成功

    --SQL 單行註解

    唯一專門用途:寫在 SQL 語句內部的單行註解(注意後面必加空格)。

    鑑識報告:這是專屬於資料庫法庭的隱形藥水。在編寫 SQL 指令時,只要加上 --(後面要記得留一個空格),後方那一整行的字就會被資料庫當作隱形空氣,完全不執行。專門用來在複雜的 SQL 語法中,幫特定欄位或條件加上極簡的中文解釋筆記。

    鍵位指法:右手 小指 上2 右1 連按兩次

  6. 鑑識成功

    ,逗號

    唯一專門用途:多個欄位或值的「分隔符號」。

    鑑識報告:這是排隊時的排雷分界線。不論是在 SELECT 後面列出好幾個要抓取的欄位,還是在 VALUES 後面依序塞入好幾筆資料,欄位與欄位之間一律要用逗號隔開,主機才知道這是不同的線索。注意:最後一個欄位的後面絕對不能加逗號,否則會直接結案失敗。

    鍵位指法:右手 中指 下1

  7. 鑑識成功

    .點號

    唯一專門用途:資料表與欄位的「階層串接」。

    鑑識報告:在 SQL 裡,點號的作用是「從屬關係」,用來精準指定 `表名`.`欄位名`,明確指出這個線索是屬於哪一個檔案夾的。

    鍵位指法:右手 無名指 下1

  8. 鑑識成功

    *星號 / All

    唯一專門用途:選擇所有的資料直欄。

    鑑識報告:這是 SQL 偵辦時的萬能搜索令。當你寫下 SELECT * 時,就是命令資料庫:「不必篩選!把這張表格裡面所有的欄位、所有的祕密,通通攤開給我看!」在進行地毯式搜索時非常方便。

    鍵位指法:左小指 Shift + 右中指 上2