哈佛公開課程_e-75 建構動態網站 第4講_sql
TRANSCRIPT
建構動態網站 第4講SQL講師:David Malan
哈佛大學公開課 by Bater 2014.5
課程連結
本講大綱
● 程式碼品質● 框架引用● XPath● fgetcsv● SQL
程式碼(網站)品質
● 使用者可能會有意料之外或惡意操作(如負數,空白,全形,保留字<>"$#(-?... ),可能造成程式意外或毀損
● 基礎的網站防護:SQL injection資料隱碼攻擊,Cross-Site Scripting(XSS)跨站腳本攻擊
● 有大量複製貼上的片段通常不是好程式,要思考是否可以重複運用
● 是否可用loop(迴圈)取代
嘗試利用車牌進行 sql injection
程式碼(網站)品質 (續)
● 函式與變數命名是否有意義(而非xx,tt,aa..)● 是否有適當註解● 每行程式不超過80字元 (約編輯器寬),不
過不強制,只要風格合理且一致即可●
網頁框架的應用
● 多個頁面有相同的區塊,通常不會複製貼上多次相同程式碼;而是會將區塊獨立出來,每個頁面去重複引用。
● 例如:
首頁.php
訂單.php
主選單
主選單
主選單.php
首頁.php
訂單.php
語法
● include()○ 如果頁面不存在,會略過(待確認)
● require()○ EX. require(“header.php”)○ 如果該頁面不存在,php解析會馬上終止○ 建議使用,比較方便debug
● include_once()● require_once()
○ 只會引用一次,避免巢狀無限引用
元素頁面的路徑
● 為了避免讓使用者直接訪問,可利用上周所講的方法,放在無法訪問的路徑下
● EX: require(“../lib/header.php”)
利用函式取代重複的程式
● 看起來有點多此一舉,但隨著架構越來越複雜,比較能靈活運用
● 例如傳入參數
XPath
範例資料結構
ps.xml的id屬性不可用數字開頭
利用foreach
利用XPath
簡化後 (child::可省略)
xpath(“//item[@id=’$var’]”);完整寫法如下:
遍尋所有的目錄,優點是省事,缺點是犧牲效能
XPath
● 因為有了XPath,XML可以作為小型的資料庫使用
● 相較之下,CSV沒有類似的API可以查詢
各種資料結構
● fgetcsv (PHP取得csv的方法)● 「!==」運算子,除了判斷值之外也會判斷資
料型態,因為PHP對於資料型態很寬鬆。例如:(===相對於==)○ false !== 0 回傳 true○ false != 0 回傳 false
● fputcsv (PHP將資料轉為csv的方法)
fgetcsv與fputcsv
fgetcsv 範例
總結XML與CSV的優缺點
XML優點:
● XPath可直接查詢
● 有結構與層級概念
● 不需特殊的工具就可編輯
缺點:
● 檔案教CSV大(多開頭結尾字元)
● 沒有權限控管、資料型態檢查、寫入限制
CSV優點:
● 檔案小缺點:
● 無法直接查詢,一定要遍歷整份文件
● 沒有階層概念
SQL (Structured Query Language)結構化查詢語言
(終於要進入正題了)
SQL
● SQL語言有共通的標準,基本上通用,但是每家會有少部分自己獨特的寫法
● MySQL跟PHP有很好的搭配(因為都不用錢)
● 右圖為常見的SQL指令
● 推薦使用phpMyAdmin管理 (免空上也是)
建資料庫時的心法
● char是故定長度,好處是索引方便● varchar可以節省空間● text,如果內容會超過64kb建議使用(巨量
資料),實際上是存放在硬碟的某處,這邊只是留個指向
● 是否有負值、時間戳記● 是否允許為空● 預設值● 自動增值
● 主鍵primary key,MySQL只能設一個主鍵(預設為索引且唯一)
● 唯一值,非主鍵,但是唯一● 索引index,事先儲存資料的樹狀描述,需
要花額外的硬碟空間,但是搜尋效率會大幅提高,否則就會查找每一筆資料
● fulltext 全文索引
數據庫引擎
● MyISAM(預設),高效但不支援transactions● InnoDB (下周會講)● MEMORY只存在記憶體中,需要很多快取
查詢儲存又馬上丟棄可使用● FEDERATED用於大量數據,可進行數據
分區● ARCHIVE提供很好的壓縮● CSV類似前面提的CSV