SlideShare a Scribd company logo
1 of 24
Download to read offline
建構動態網站 第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
實作範例
程式pdf瀏覽

More Related Content

Viewers also liked

Open Data 上手簡介
Open Data 上手簡介Open Data 上手簡介
Open Data 上手簡介TH Schee
 
哈佛公開課_E-75 建構動態網站 第2講 PHP(續)
哈佛公開課_E-75 建構動態網站 第2講 PHP(續)哈佛公開課_E-75 建構動態網站 第2講 PHP(續)
哈佛公開課_E-75 建構動態網站 第2講 PHP(續)奕孝 陳
 
HTML5--The 30,000' View (A fast-paced overview of HTML5)
HTML5--The 30,000' View (A fast-paced overview of HTML5)HTML5--The 30,000' View (A fast-paced overview of HTML5)
HTML5--The 30,000' View (A fast-paced overview of HTML5)Peter Lubbers
 
當mit遇見MIT_波士頓見聞分享~陳奇中教授演講投影片
當mit遇見MIT_波士頓見聞分享~陳奇中教授演講投影片當mit遇見MIT_波士頓見聞分享~陳奇中教授演講投影片
當mit遇見MIT_波士頓見聞分享~陳奇中教授演講投影片Chyi-Tsong Chen
 
CSS - OOCSS, SMACSS and more
CSS - OOCSS, SMACSS and moreCSS - OOCSS, SMACSS and more
CSS - OOCSS, SMACSS and moreRuss Weakley
 
Getting Started with HTML5 in Tech Com (STC 2012)
Getting Started with HTML5 in Tech Com (STC 2012)Getting Started with HTML5 in Tech Com (STC 2012)
Getting Started with HTML5 in Tech Com (STC 2012)Peter Lubbers
 

Viewers also liked (9)

Open Data 上手簡介
Open Data 上手簡介Open Data 上手簡介
Open Data 上手簡介
 
哈佛公開課_E-75 建構動態網站 第2講 PHP(續)
哈佛公開課_E-75 建構動態網站 第2講 PHP(續)哈佛公開課_E-75 建構動態網站 第2講 PHP(續)
哈佛公開課_E-75 建構動態網站 第2講 PHP(續)
 
HTML5--The 30,000' View (A fast-paced overview of HTML5)
HTML5--The 30,000' View (A fast-paced overview of HTML5)HTML5--The 30,000' View (A fast-paced overview of HTML5)
HTML5--The 30,000' View (A fast-paced overview of HTML5)
 
當mit遇見MIT_波士頓見聞分享~陳奇中教授演講投影片
當mit遇見MIT_波士頓見聞分享~陳奇中教授演講投影片當mit遇見MIT_波士頓見聞分享~陳奇中教授演講投影片
當mit遇見MIT_波士頓見聞分享~陳奇中教授演講投影片
 
CSS - OOCSS, SMACSS and more
CSS - OOCSS, SMACSS and moreCSS - OOCSS, SMACSS and more
CSS - OOCSS, SMACSS and more
 
Getting Started with HTML5 in Tech Com (STC 2012)
Getting Started with HTML5 in Tech Com (STC 2012)Getting Started with HTML5 in Tech Com (STC 2012)
Getting Started with HTML5 in Tech Com (STC 2012)
 
Mixing Python and Java
Mixing Python and JavaMixing Python and Java
Mixing Python and Java
 
Introduction to java
Introduction to javaIntroduction to java
Introduction to java
 
Java tutorial PPT
Java tutorial PPTJava tutorial PPT
Java tutorial PPT
 

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

Grails:下一代Java Web开发框架
Grails:下一代Java Web开发框架Grails:下一代Java Web开发框架
Grails:下一代Java Web开发框架foxgem
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressAppzhoujg
 
基礎網頁程式攻擊檢驗
基礎網頁程式攻擊檢驗基礎網頁程式攻擊檢驗
基礎網頁程式攻擊檢驗Taien Wang
 
构建可维护的Javascript 小米网
构建可维护的Javascript 小米网构建可维护的Javascript 小米网
构建可维护的Javascript 小米网yang alex
 
議題二:Web應用程式安全防護
議題二:Web應用程式安全防護議題二:Web應用程式安全防護
議題二:Web應用程式安全防護Nicolas su
 
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發koji lin
 
領域驅動設計
領域驅動設計領域驅動設計
領域驅動設計Clark
 
領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)Jeff Chu
 
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)Duran Hsieh
 
淘宝网前端开发面试题
淘宝网前端开发面试题 淘宝网前端开发面试题
淘宝网前端开发面试题 Lumend
 
Telligem 1_xss
Telligem  1_xssTelligem  1_xss
Telligem 1_xsspaitoubing
 
用戶端攻擊與防禦
用戶端攻擊與防禦用戶端攻擊與防禦
用戶端攻擊與防禦Taien Wang
 
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程twMVC
 
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練42015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4Duran Hsieh
 
網站設計100步
網站設計100步網站設計100步
網站設計100步evercislide
 
OWASP Top 10 (2013) 正體中文版
OWASP Top 10 (2013) 正體中文版OWASP Top 10 (2013) 正體中文版
OWASP Top 10 (2013) 正體中文版Bruce Chen
 
軟體弱點掃描
軟體弱點掃描軟體弱點掃描
軟體弱點掃描Rainmaker Ho
 
Kiss开发平台简介
Kiss开发平台简介Kiss开发平台简介
Kiss开发平台简介cecepig
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型Jackson Tian
 

Similar to 哈佛公開課程_E-75 建構動態網站 第4講_SQL (20)

TypeScript
TypeScriptTypeScript
TypeScript
 
Grails:下一代Java Web开发框架
Grails:下一代Java Web开发框架Grails:下一代Java Web开发框架
Grails:下一代Java Web开发框架
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
 
基礎網頁程式攻擊檢驗
基礎網頁程式攻擊檢驗基礎網頁程式攻擊檢驗
基礎網頁程式攻擊檢驗
 
构建可维护的Javascript 小米网
构建可维护的Javascript 小米网构建可维护的Javascript 小米网
构建可维护的Javascript 小米网
 
議題二:Web應用程式安全防護
議題二:Web應用程式安全防護議題二:Web應用程式安全防護
議題二:Web應用程式安全防護
 
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發
 
領域驅動設計
領域驅動設計領域驅動設計
領域驅動設計
 
領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)
 
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)
 
淘宝网前端开发面试题
淘宝网前端开发面试题 淘宝网前端开发面试题
淘宝网前端开发面试题
 
Telligem 1_xss
Telligem  1_xssTelligem  1_xss
Telligem 1_xss
 
用戶端攻擊與防禦
用戶端攻擊與防禦用戶端攻擊與防禦
用戶端攻擊與防禦
 
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
 
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練42015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
 
OWASP Top 10 (2013) 正體中文版
OWASP Top 10 (2013) 正體中文版OWASP Top 10 (2013) 正體中文版
OWASP Top 10 (2013) 正體中文版
 
軟體弱點掃描
軟體弱點掃描軟體弱點掃描
軟體弱點掃描
 
Kiss开发平台简介
Kiss开发平台简介Kiss开发平台简介
Kiss开发平台简介
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 

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