Web 伺服器必須讓處理腳本能夠儲存狀態資訊,以便日後存取。雖然可以用原始方式(如寫入文字檔或自製迷你資料庫),但成熟的資料庫系統才能提供複雜 Web 應用(電子商務等)所需的完整服務。既然有免費軟體包可用,開發自製資料庫引擎得不償失,採用第三方資料庫更能讓開發者專注於應用邏輯,而非資料庫維護。
MySQL 是快速、多線程、全功能的 SQL 伺服器,支援 ANSI 與 ODBC 標準,並在第三方擴充下提供事務安全表。它採用客戶端/伺服器架構:單一 mysqld 伺服器管理多個資料庫,每個資料庫包含任意數量的表格,表格由帶型別的欄位組成(整數、實數、字串、二進位流等)。
MySQL 易於整合進 Linux 應用,無論用腳本語言(Tcl、Perl、PHP)或編譯語言(C/C++)皆可,因為大多數腳本語言底層以 C 實現,且已有現成的 MySQL C API 封裝。
API 採連線導向模式:
在 CGI 應用中,Web 伺服器啟動腳本,腳本輸出 HTML 並可穿插資料庫操作,實現動態網頁。
# 載入 SQL 共享庫
load /home/aroetter/tcl-sql/sql.so
# 連線參數
set DBNAME "clientWebSite"
set TBLNAME "products"
set DBHOST "backend.company.com"
set DBUSER "MySQLuser"
set DBPASSWD "abigsecret"
set targetPrice 200
# 連線並選擇資料庫
set handle [sql connect $DBHOST $DBUSER $DBPASSWD]
sql selectdb $handle $DBNAME
# 執行查詢
sql query $handle "select * from $TBLNAME where price <= $targetPrice"
# 輸出 HTML 表格標頭
puts ""
puts "Product Id Description Price (\$) "
# 逐行輸出結果
while {[set row [sql fetchrow $handle]] != ""} {
set prodid [lindex $row 0]
set descrip [lindex $row 1]
set price [lindex $row 2]
puts "$prodid $descrip $price "
}
puts "
"
# 清理
sql endquery $handle
sql disconnect $handle
#include
#include
#include
const char *DBNAME = "clientWebSite";
const char *DBTABLE = "products";
const char *DBHOST = "backend.company.com";
const char *DBUSER = "MySQLuser";
const char *DBPASSWD = "abigsecret";
int main() {
try {
Connection con(DBNAME, DBHOST, DBUSER, DBPASSWD);
Query query = con.query();
query << "select * from " << DBTABLE;
Result res = query.store();
std::cout << "\n";
std::cout << "Product Id Description Price ($) \n";
for (Result::iterator cur = res.begin(); cur != res.end(); ++cur) {
Row row = *cur;
std::cout << "" << row[0] << " " << row[1]
<< " " << row[2] << " \n";
}
std::cout << "
" << std::endl;
} catch (BadQuery er) {
std::cerr << "Error: " << er.error << std::endl;
return -1;
} catch (BadConversion er) {
std::cerr << "Error: Can't convert \"" << er.data
<< "\" to a \"" << er.type_name << "\"." << std::endl;
return -1;
}
return 0;
}
編譯語言執行效率較高,建議將核心資料庫邏輯以 C/C++ 實作,再由腳本或 Web 伺服器呼叫。
mysqld,限制潛在入侵影響範圍。資料庫驅動網站能提供動態、即時更新的資訊,並支援跨會話的狀態持久化。利用免費開源的 MySQL,配合適當的安全設定,即可低成本構建穩健的電子商務或動態網站後端。