24
建構動態網站 4SQL 講師:David Malan 哈佛大學公開課 by Bater 2014.5 課程連結

哈佛公開課程_E-75 建構動態網站 第4講_SQL

  • Upload
    -

  • View
    402

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

建構動態網站 第4講SQL講師:David Malan

哈佛大學公開課 by Bater 2014.5

課程連結

Page 2: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

本講大綱

● 程式碼品質● 框架引用● XPath● fgetcsv● SQL

Page 3: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

程式碼(網站)品質

● 使用者可能會有意料之外或惡意操作(如負數,空白,全形,保留字<>"$#(-?... ),可能造成程式意外或毀損

● 基礎的網站防護:SQL injection資料隱碼攻擊,Cross-Site Scripting(XSS)跨站腳本攻擊

● 有大量複製貼上的片段通常不是好程式,要思考是否可以重複運用

● 是否可用loop(迴圈)取代

Page 4: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

嘗試利用車牌進行 sql injection

Page 5: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

程式碼(網站)品質 (續)

● 函式與變數命名是否有意義(而非xx,tt,aa..)● 是否有適當註解● 每行程式不超過80字元 (約編輯器寬),不

過不強制,只要風格合理且一致即可●

Page 6: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

網頁框架的應用

● 多個頁面有相同的區塊,通常不會複製貼上多次相同程式碼;而是會將區塊獨立出來,每個頁面去重複引用。

● 例如:

首頁.php

訂單.php

主選單

主選單

主選單.php

首頁.php

訂單.php

Page 7: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

語法

● include()○ 如果頁面不存在,會略過(待確認)

● require()○ EX. require(“header.php”)○ 如果該頁面不存在,php解析會馬上終止○ 建議使用,比較方便debug

● include_once()● require_once()

○ 只會引用一次,避免巢狀無限引用

Page 8: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

元素頁面的路徑

● 為了避免讓使用者直接訪問,可利用上周所講的方法,放在無法訪問的路徑下

● EX: require(“../lib/header.php”)

Page 9: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

利用函式取代重複的程式

● 看起來有點多此一舉,但隨著架構越來越複雜,比較能靈活運用

● 例如傳入參數

Page 10: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

XPath

Page 11: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

範例資料結構

ps.xml的id屬性不可用數字開頭

Page 12: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

利用foreach

利用XPath

簡化後 (child::可省略)

Page 13: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

xpath(“//item[@id=’$var’]”);完整寫法如下:

遍尋所有的目錄,優點是省事,缺點是犧牲效能

Page 14: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

XPath

● 因為有了XPath,XML可以作為小型的資料庫使用

● 相較之下,CSV沒有類似的API可以查詢

Page 15: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

各種資料結構

Page 16: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

● fgetcsv (PHP取得csv的方法)● 「!==」運算子,除了判斷值之外也會判斷資

料型態,因為PHP對於資料型態很寬鬆。例如:(===相對於==)○ false !== 0 回傳 true○ false != 0 回傳 false

● fputcsv (PHP將資料轉為csv的方法)

fgetcsv與fputcsv

Page 17: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

fgetcsv 範例

Page 18: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

總結XML與CSV的優缺點

XML優點:

● XPath可直接查詢

● 有結構與層級概念

● 不需特殊的工具就可編輯

缺點:

● 檔案教CSV大(多開頭結尾字元)

● 沒有權限控管、資料型態檢查、寫入限制

CSV優點:

● 檔案小缺點:

● 無法直接查詢,一定要遍歷整份文件

● 沒有階層概念

Page 19: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

SQL (Structured Query Language)結構化查詢語言

(終於要進入正題了)

Page 20: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

SQL

● SQL語言有共通的標準,基本上通用,但是每家會有少部分自己獨特的寫法

● MySQL跟PHP有很好的搭配(因為都不用錢)

● 右圖為常見的SQL指令

● 推薦使用phpMyAdmin管理 (免空上也是)

Page 21: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

建資料庫時的心法

● char是故定長度,好處是索引方便● varchar可以節省空間● text,如果內容會超過64kb建議使用(巨量

資料),實際上是存放在硬碟的某處,這邊只是留個指向

● 是否有負值、時間戳記● 是否允許為空● 預設值● 自動增值

Page 22: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

● 主鍵primary key,MySQL只能設一個主鍵(預設為索引且唯一)

● 唯一值,非主鍵,但是唯一● 索引index,事先儲存資料的樹狀描述,需

要花額外的硬碟空間,但是搜尋效率會大幅提高,否則就會查找每一筆資料

● fulltext 全文索引

Page 23: 哈佛公開課程_E-75 建構動態網站 第4講_SQL

數據庫引擎

● MyISAM(預設),高效但不支援transactions● InnoDB (下周會講)● MEMORY只存在記憶體中,需要很多快取

查詢儲存又馬上丟棄可使用● FEDERATED用於大量數據,可進行數據

分區● ARCHIVE提供很好的壓縮● CSV類似前面提的CSV