## 個別網頁間傳值GET vs. Post | (單)傳值 | GET | POST | | -------- | -------- | -------- | | 途徑 | 放在header進行傳送 | 放在訊息主體內進行傳送 | | (比喻) | 像明信片:寄送地址和訊息都是公開的 | 像信封寄信:信封上只有傳遞的地址及收件人名稱,但訊息的內容放在信封內,不會被一般人看見。 | | 紀錄 | 會被Cache紀錄 | 不會被Cache紀錄 | | 長度限制 | 受限於 QueryString(依瀏覽器規定) | 資料長度沒有限制,且可用在上傳檔案 | | 安全性 | 適合可公開的資料 | 適合用來傳送隱密性較高的資料 | | 傳<->收 | 傳form:get。收$_GET['xxx']的變數 | 傳form:post。收$_POST['xxx']的變數 | --- ## isset() vs. empty() 用來判斷傳值否、或存在內容否 * isset()用在判斷**變數宣告**與否 * empty()用在判斷**變數是否為空值** (0也是空值) https://mackliu.github.io/php-book/2021/09/21/php-lesson-01/ --- ## 多個網頁間傳值COOKIE vs. SESSION | (多)傳值 | COOKIE | SESSION | | -------- | -------- | -------- | | 儲存位置 | 客戶端 | 伺服器端 | | 安全性 | 存在User,可被查看/修改,安全性較低 | 存儲在伺服器端,無法直接訪問或修改,安全性較高 | | 長度限制 | 有長度和數量限制(視瀏灠器) | 儲存長度較長 | | 數據容量 | <=4KB | 通常可以更大 | | 生命週期 | 可以設定過期時間 | 伺服器可設置過期時間,未設置時關閉瀏覽器後失效 | --- ## 檔案拆分 include() vs. require() | 檔案引入 | include (含include_once) | require (含require_once) | | -------- | -------- | -------- | | 引入時間 | php程式執行過程中引入(include_once會先檢查檔案是否已引用) | php檔案執行前先引入 | | 語法位置 | 可在程式流程控制區段中 | 會放在檔案的最前面先執行 | | 錯誤時執行 | 檔案不存在時會跳錯誤訊息,但繼續執行後面的程式 | 檔案不存在時會跳出嚴重錯誤,並中止程式 | | 適用場景 | 適合動態的檔案引入,比如會因為變數的不同而讓 include 檔案的執行結果不同的內容 | 適合靜態的檔案引入,比如函式庫,常數定義等等 | ## DB連線 | Column 1 | mysql_connect | mysqli_connect | PDO** | | -------- | -------- | -------- | -------- | | 比較 | 最原始,因安全性問題,PHP7.0後己經不支援 | 函式字尾加上i系列的語法為安全性增強的語法,也是目前許多PHP系統常見的用法 | 將資料庫連線抽象化後的機制,可以相容多種資料庫,同時並兼顧安全性 | **PDO連線語法** ``` $dsn="mysql:host=localhost;charset=utf8;dbname=students"; $pdo=new PDO($dsn,'root','',[]); $sql="SELECT * FROM `students` where `id` < 30"; $rows = $pdo->query($sql)->fetchAll(); ```