整理自學習筆記,涵蓋 8 款高頻 jQuery 插件用法、PHP 連接 MySQL 三大擴展對比、CRUD 核心代碼模式,適合速查復習。
| 插件 | 核心方法 | 典型場景 | 關鍵配置 |
|---|---|---|---|
| Form (ajaxForm) | $(form).ajaxForm(options) | 表單無刷新提交、文件上傳 | dataType:'json', beforeSubmit, success, uploadProgress |
| Lightbox | $(selector).lightBox(options) | 圖片畫廊、燈箱效果 | overlayBgColor, overlayOpacity, containerResizeSpeed |
| jqZoom | $(selector).jqZoom(options) | 產品圖放大鏡 | zoomWidth, zoomHeight, zoomType:'reverse/standard' |
| Cookie | $.cookie(key,val) / $.cookie(key) / $.cookie(key,null) | 記住登錄、偏好設置 | expires, path, domain, secure |
| Autocomplete | $(input).autocomplete(source, options) | 搜索建議、郵箱域名補全 | minChars, formatItem, formatMatch, formatResult |
| ContextMenu | $(selector).contextMenu(menuId, options) | 右鍵自定義菜單 | bindings: { 'itemId': fn } |
| 自定義對象級 | $.fn.myPlugin = function(){...} | 擴展 jQuery 原型,如 $(ul).focusColor('#ccc') | 鏈式調用 return this.each(...) |
| 自定義類級 | $.myUtil = { add:..., sub:... } | 工具函數命名空間,$.addNum(1,2) | 不依賴 DOM,純邏輯封裝 |
| 擴展 | 風格 | 特點 | 推薦場景 |
|---|---|---|---|
| mysqli (改進版) | 面向過程 / 面向對象 | 預處理、多語句、事務、增強調試 | 傳統項目、不想用 ORM |
| PDO (PHP Data Objects) | 面向對象、統一 API | 支援 12+ 數據庫、預處理、異常模式、靈活獲取模式 | 現代項目首選、多庫遷移 |
| mysqlnd (原生驅動) | 底層驅動 | 內存效率高、統計信息、插件擴展 | mysqli/PDO 內部自動使用 |
// mysqli 面向對象
$mysqli = new mysqli('localhost', 'user', 'pass', 'db');
$mysqli->set_charset('utf8mb4');
if ($mysqli->connect_errno) die('Connect failed: ' . $mysqli->connect_error);
// PDO (推薦)
$dsn = 'mysql:host=localhost;dbname=db;charset=utf8mb4';
$pdo = new PDO($dsn, 'user', 'pass', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
// CREATE (參數化,防注入)
$stmt = $pdo->prepare("INSERT INTO users (name, email, created_at) VALUES (?, ?, NOW())");
$stmt->execute(['張三', 'zhang@example.com']);
$id = $pdo->lastInsertId();
// READ (單條)
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$id]);
$user = $stmt->fetch(); // FETCH_ASSOC
// READ (列表 + 分頁)
$page = max(1, (int)($_GET['page'] ?? 1));
$perPage = 15;
$offset = ($page - 1) * $perPage;
$stmt = $pdo->prepare("SELECT * FROM users ORDER BY id DESC LIMIT ?, ?");
$stmt->bindValue(1, $offset, PDO::PARAM_INT);
$stmt->bindValue(2, $perPage, PDO::PARAM_INT);
$stmt->execute();
$list = $stmt->fetchAll();
// UPDATE
$stmt = $pdo->prepare("UPDATE users SET name = ? WHERE id = ?");
$stmt->execute(['李四', $id]);
// DELETE (軟刪除推薦)
$stmt = $pdo->prepare("UPDATE users SET deleted_at = NOW() WHERE id = ?");
$stmt->execute([$id]);
// 事務
try {
$pdo->beginTransaction();
$pdo->prepare("INSERT INTO orders ...")->execute([...]);
$pdo->prepare("UPDATE products SET stock = stock - 1 WHERE id = ?")->execute([$pid]);
$pdo->commit();
} catch (Throwable $e) {
$pdo->rollBack();
throw $e;
}
$stmt = null / unset($stmt) 釋放語句句柄(PDO 自動在腳本結束釋放)。$pdo = null 關閉連接(持久連接 PDO::ATTR_PERSISTENT => true 謹慎用)。bindValue(..., PDO::PARAM_INT)。declare(strict_types=1); + PHP 8.1+ mysqli_execute_query() / PDO::prepare() 返回 PDOStatement 直接鏈式調用。ERRMODE_EXCEPTION,全局 try-catch 或框架異常處理器捕獲。mysql_connect 已在 PHP 7.0 移除,絕對不要使用。SELECT * 暴露敏感字段、增加網絡傳輸,顯式列出欄位。LIMIT ?, ? 在 PDO 中需 bindValue 指定 PARAM_INT,否則報錯。fetchAll() 爆內存,改用 while ($row = $stmt->fetch()) 游標式處理。utf8mb4(支援 Emoji),資料庫/表/連接/HTML 全鏈路一致。這些筆記涵蓋了從前端交互到後端數據層的高頻操作,建議收藏備查。