核心原則:**PHP 在伺服器端執行產生文字,JS 在瀏覽器端執行**。輸出 JS 代碼時,字串值必須用引號包裹,並處理特殊字元。
<?php
$time = '2023-05-20 13:25:55';
$escaped = json_encode($time); // 自動處理引號、換行、Unicode
?>
<script>
document.getElementById('time').innerHTML = <?= $escaped ?>;
// 輸出:document.getElementById('time').innerHTML = "2023-05-20 13:25:55";
</script>
錯誤示範:`innerHTML = <?php echo $time ?>;` → 缺引號導致 JS 語法錯誤。
<?php
// datetime → timestamp
$dt = '2023-05-20 13:25:55';
$ts = strtotime($ts); // 1684560355
// timestamp → datetime
echo date('Y-m-d H:i:s', $ts); // 2023-05-20 13:25:55
// MySQL DATETIME 欄位直接讀取為字串,可直接 strtotime()
// 或用 MySQL UNIX_TIMESTAMP(datetime_col) 在 SQL 層轉換
?>
<?php
$val = 123.456789;
// 四捨五入保留 2 位小數(字串)
echo number_format($val, 2); // "123.46"
// 格式化不四捨五入(截斷)
echo sprintf('%.2f', $val); // "123.45" (注意:sprintf 實際也會四捨五入,若需截斷需 floor/ceil)
// 精確金額計算:使用 BCMath 或整數分單位
$price = 19.99;
$qty = 3;
$total = bcmul($price, $qty, 2); // "59.97"
?>
-- 四個權限層級
-- 1. 全域
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY 'pwd';
-- 2. 資料庫級
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'dev'@'localhost';
-- 3. 資料表級
GRANT SELECT ON mydb.users TO 'readonly'@'%';
-- 4. 欄位級
GRANT SELECT (id, name), UPDATE (name) ON mydb.users TO 'limited'@'%';
-- 撤銷
REVOKE INSERT ON mydb.* FROM 'dev'@'localhost';
-- 刷新生效
FLUSH PRIVILEGES;
-- 單欄索引
CREATE INDEX idx_name ON users(name);
-- 組合索引(最左前綴原則)
CREATE INDEX idx_status_created ON orders(status, created_at);
-- 查看索引
SHOW INDEX FROM users;
-- 避免過度索引:寫入效能下降、佔用空間
| 變數 | 來源 | 用途 |
|---|---|---|
$_GET | URL 查詢字串 | 查詢、分頁、搜尋參數 |
$_POST | POST 請求體 | 表單提交、API 資料 |
$_REQUEST | GET+POST+COOKIE 合併 | **不建議使用**(來源不明、安全風險) |
$_SERVER | 伺服器環境 | IP、User-Agent、請求方法等 |
$_FILES | 檔案上傳 | 處理上傳檔案 |
$_COOKIE | Cookie | 追蹤、偏好設定 |
$_SESSION | Session | 登入狀態、購物車 |
<?php
$name = 'World';
// Heredoc:解析變數、跳脫序列
$sql = <<<SQL
SELECT * FROM users
WHERE name = '$name'
AND status = 1
SQL;
// Nowdoc (PHP 5.3+):單引號行為,不解析變數
$raw = <<<'RAW'
{$name} 不會被解析
\n 也不會換行
RAW;
echo $sql; // 含變數值
echo $raw; // 原樣輸出
?>
規則:結束標識必須頂格、獨佔一行、前後無空白;Heredoc 等同雙引號,Nowdoc 等同單引號。
這些是 PHP 開發高頻核心知識點:輸出 JS 必須 json_encode、時間處理用 strtotime/date、金額用 BCMath、權限分級最小化、索引遵循最左前綴、拒用 $_REQUEST、長字串用 Heredoc。掌握細節,避開坑洞,寫出健壯代碼。