在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

Linux應用集成MySQL數據庫訪問技巧

Linux應用集成MySQL數據庫訪問技巧

更新時間:2025-10-19 文章作者:未知 信息來源:網絡 閱讀次數:

數據庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。所謂“數據庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應...
數據庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。所謂“數據庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應用程序彼此獨立的數據集合。

本文描述了MySQL,一種利用第三方數據庫開發電子貿易和其它復雜、動態網站的有效工具。MySQL 是一種快速、多線程和全功能的 SQL服務器。除了描述MySQL系統的基本體系結構以外,本文還提供了以Tcl和C++編寫的簡單示例,幫助您開發支持數據庫的Web應用。一個必須存儲或訪問大量信息的應用程序可以從使用第三方數據庫產品中受益匪淺。在對信息的訪問必須在程序的多個實例上進行時更是如此。基于Web的應用(包括電子貿易)就是它的良好例證。

為什么使用獨立數據庫?

Web服務器必須使其處理腳本有辦法來存儲有關供其以后訪問的狀態信息。盡管有可能使用比較原始一些的方法--例如轉儲到文本文件或開發自制的迷你數據庫--但只有成熟的數據庫應用才能提供更為復雜的Web應用所需的所有服務。因為有一些免費獲得的軟件包可用于該目的,所以編寫定制的特定于應用的數據庫引擎并無太大好處。 另外,使用第三方數據庫還使Web開發者不必投入到開發和維護數據庫的任務中。

MySQL數據庫

通過使用腳本語言和編譯型系統語言(例如 C),將數據庫集成到Linux應用就可能相當容易。可免費獲得的MySQL(在GNU Public License下發行)數據庫提供了一系列復雜的SQL功能,并易于集成到應用中。MySQL是快速、多線程的,并支持ANSI和ODBC SQL標準。加上第三方軟件,MySQL就支持用于事務處理應用的事務安全的表。

注:什么是事務處理?

事務是需要以原子方式執行的對數據庫所做的一系列更改。它們要么必須全部執行,要么一個都不執行。 例如,在Web上銷售產品時所有必需的數據庫更改組成一個事務。數據庫需要同時減去客戶帳戶余額和產品庫存,否則失敗并且一個操作都不執行。無論服務器出于何種原因發生崩潰都不應該引起事務被部分執行。例如帳單多算、產品沒有交付,或者庫存不實等都有可能是部分完成的事務的結果。支持事務處理的數據庫可以將一組數據庫代碼封裝在一個事務中,在事務執行期間的任何失敗會讓數據庫回滾到事務開始之前的狀態。這是通過維護所有數據庫操作的日志,以及其原始狀態表的副本來實現的,在失敗后下一次重新啟動服務器時允許回滾操作。 這種時間和空間上的開銷是事務安全數據庫系統所必需的一種折衷。單一MySQL服務器控制著一系列數據庫,它們都可以通過服務器以類似方式來訪問。 每個數據庫實際上都是一組任意數量的表,概念與其它SQL數據庫的用戶類似。每個表都由帶類型的數據列組成。 數據可以是整數、實數值、字符串或其它類型,包括原始二進制流。 表中的每一行都是存儲在數據庫中的一個記錄。

MySQL被設計和構造成客戶機/服務器。 服務器mysqld可以在能從因特網訪問到的任何機器上運行(最好與Web服務器在同一臺或最接近的一臺機器上,以確保合理的響應時間)。MySQL客戶機使用請求來與MySQL服務器聯系,修改或查詢服務器所擁有的數據庫。 在支持數據庫的Web應用程序中,數據庫客戶機是Web服務器或由Web服務器產生的CGI腳本。 這些客戶機可以用高級腳本語言或低級系統語言編寫,只要存在這種語言的數據庫API即可。在Linux中,大多數腳本語言是以C 實現的,因為存在MySQL C API,所以要將MySQL支持添加到任何現有的腳本語言或工具應該很容易。絕大部分腳本語言已經完成了這一步。


[page_break]

MySQL API

MySQL API可用于各種語言,包括幾乎所有編寫網站后端所實際使用的語言。 使用這些API,我們可以構建由Web服務器控制的 MySQL客戶機。

API(用于數據庫訪問)以基于連接的模式工作。客戶機必須做的第一件事是打開與MySQL服務器的連接。 這包括適當地使用服務器認識的用戶名和口令來對連接進行身份認證。建立了連接后,服務器選擇要使用的特定數據庫。 確定了初始化后,客戶機應用程序(就我們來說是服務器方CGI腳本)就能自由地與數據庫以兩種方式中的一種進行交互:可以運行常規SQL命令,包括添加和刪除表,以及向它們添加記錄;也可以對返回結果的數據庫運行查詢。 查詢生成一組與查詢匹配的記錄,然后,客戶機可以逐一訪問記錄,直到查看完所有記錄,或者客戶機取消暫掛的記錄檢索。一旦腳本完成了對數據庫的操作后,與服務器的連接就被關閉。

要構建集成數據庫訪問的網站,需要編寫CGI腳本來根據數據庫狀態生成動態結果。Web服務器啟動CGI腳本,然后將適當格式化的HTML輸出到它們的標準輸出流中。Web服務器捕捉到HTML后將它發送回客戶機,如同請求是對靜態HTML頁面進行的那樣。 在生成 HTML 的過程中,腳本可以修改數據庫,也可以查詢并將結果合并到它們的輸出中。

作為簡單解釋上述過程的一個示例,下面的代碼(以C和Tcl編寫)查詢一個包含某公司供銷售的產品清單的數據庫。 這絕沒有使用兩種語言MySQL API的所有特性,但提供了快速、簡易擴展的示例,可以對數據庫內容執行任何SQL命令。 在該例中,腳本顯示了低于特定價格的所有產品。 在實踐中,用戶可能在Web瀏覽器中輸入該價格,然后將它發給服務器。 我們省去了從環境變量中進行讀取來確定 HTML 表單值的細節,因為它與不支持數據庫的 CGI 腳本中執行的情況沒有什么差別。 為清晰起見,我們假設事先設置了特定一些參數(例如要查詢的價格)。

以下代碼是使用免費獲得的Tcl Generic Database Interface以Tcl實現的。這樣一種接口的好處在于Tcl是解釋型的,可以對代碼進行迅速開發和快速修改。
Tcl示例

#This code prints out all products in the database
# that are below a specified price (assumed to have been determined
# beforehand, and stored in the variable targetPrice)
# The output is in HTML table format, appropriate for CGI output

#load the SQL shared object library. the Tcl interpreter could also
#have been compiled with the library, making this line unnecessary
load /home/aroetter/tcl-sql/sql.so

#these are well defined beforehand, or they could
#be passed into the script
set DBNAME "clientWebSite";
set TBLNAME "products";
set DBHOST "backend.company.com"
set DBUSER "mysqluser"
set DBPASSWD "abigsecret"

set targetPrice 200;

#connect to the database
set handle [sql connect $DBHOST $DBUSER $DBPASSWD]
sql selectdb $handle $DBNAME ;# get test database

#run a query using the specified sql code
sql query $handle "select * from $TBLNAME where price <= $targetPrice"

#print out html table header
puts "<table border=4>"
puts "<th>Product Id <th width=200>Description <th>Price (\$)"

#output table rows - each fetchrow retrieves one result
#from the sql query
while {[set row [sql fetchrow $handle]] != ""} {
    set prodid [lindex $row 0]
    set descrip [lindex $row 1]
    set price [lindex $row 2]
    puts "<tr><td>$prodid <td align=center>$descrip <td>$price"
}

puts "</table>"

#empty the query result buffer - should already be empty in this case
sql endquery $handle
#close the db connection - in practice this same connection
#is used for multiple queries
sql disconnect $handle


[page_break]

下面的代碼是使用正式MySQL C++ API MySQL++以C++編寫的等價腳本。該版本的優勢在于它是編譯型的,因此比解釋語言更快。經常用在特定站點的數據庫代碼應該以C或C++編寫,然后由腳本或直接由Web服務器訪問,以改進整體運行時間。

C++示例

#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 {
    //open the database connection and query
    Connection con(DBNAME, DBHOST, DBUSER, DBPASSWD);
    Query query = con.query();

    //write valid sql code to the query object
    query << "select * from " << DBTABLE;

    //run the query and store the results
    Result res = query.store();

    //write out the html table header
    cout << "<table border=4>\n";
    cout << "<th>Product Id <th width=200>Description"
  << "<th>Price ($)" << endl;

    Result::iterator curResult;
  Row row;

    //iterate over each result and put it into an html table
    for (curResult = res.begin(); curResult != res.end(); curResult++) {
      row = *curResult;
      cout << "<tr><td align=center>" << row[0]
          << "<td>" << row[1]
          << "<td>" << row[2] << endl;

    }
    cout << "</table>" << endl;

  } catch (BadQuery er) {
    // handle a bad query (usually caused by a sql syntax error)
    cerr << "Error: " << er.error <<  endl;
    return -1;

  } catch (BadConversion er) {
 //handle conversion errors out of the database as well
    cerr << "Error: Can't convert \"" << er.data << "\" to a \""
  << er.type_name << "\"." << endl;
    return -1;
  }
  return 0;
}
 
安全性

在Web上創建以Web支持的應用有一些開發者需要考慮的問題。所有有關Web服務器上CGI程序的問題,例如Web服務器處理許可權和腳本方的輸入檢查,也仍然需要考慮。

除此之外,維護數據庫系統的安全性也很有必要。這涉及保護數據庫服務器的許可權系統,以及使從數據庫客戶機到服務器的連接安全。

MySQL提供了深入的安全性系統,有人形容它是“高級但不標準”。MySQL允許根據用戶名、客戶機主機和要訪問的數據庫對客戶機進行訪問。要創建安全的系統,讓所有用戶使用強口令,不要給他們任何他們不是絕對需要的訪問權。這包括表面上無害的特權,例如可以讓用戶查看所有正在運行的進程(包括更改其他用戶口令的那些)的處理特權。最好的辦法是以無特權的Unix用戶運行服務器進程本身,這樣如果一個數據庫被泄露,也不至于擊垮整個系統。 這與以用戶nobody而非root用戶運行httpd類似。 描述系統訪問的表是作為單獨的MySQL數據庫存儲的,可以由MySQL root用戶更新。 請注意,MySQL服務器根據MySQL用戶名授予特權,這些用戶名與Unix用戶名不同。不過,有一個MySQL root用戶名,它對數據庫有全部權限。 一旦服務器確定了連接客戶機是誰,以及它們在嘗試連接什么之后,就根據給定的一組權限來控制訪問權。要防止訪問表中主機名被DNS電子欺騙,可以輸入所有主機的IP地址,或請求服務器將IP地址解析回原始主機名來使其他人截獲DNS請求和回答更困難。

除了服務器訪問表以外,與服務器的通信也必須很安全。從客戶機登錄到服務器上時,口令不以純文本方式發送;不過所有后續 SQL 命令將以純文本方式發送。為達到更高的安全性,使用ssh來設置端口轉發。它將服務器和客戶機之間的所有通信進行加密,防止有人在傳輸中觀察它。來自客戶機的數據發送到客戶機本地機器中本地ssh服務器所偵聽的端口上。它由本地ssh服務器使用,加密后發送給遠程ssh服務器,由它進行解密并轉發到MySQL服務器端口。

在實際中,最安全的方法是在 Web 服務器所在的機器上運行數據庫服務器,并讓由Web服務器產生的CGI腳本通過UNIX(本地)套接字與MySQL服務器進行通信。該設置可以讓數據庫管理員禁用所有與MySQL服務器的遠程連接。如果Web和數據庫服務器必須位于不同的機器上,加密它們之間的所有通信,或者將兩臺機器通過其自己專用的、物理上隔離的網絡連接。只創建一個由Web服務器使用的用戶帳戶(除 root 用戶外)以登錄到數據庫服務器。

由數據庫驅動的網站是一些功能強大的工具,可以讓開發者創建提供更新信息的動態站點,并讓由客戶機發起的更改在多個會話之間持續。后端數據庫的使用對于管理電子貿易和其它應用的用戶來說必不可少。通過使用可免費獲得的軟件,有可能建立由數據庫驅動的站點,安全地將數據庫連通性集成到站點現有的CGI體系結構中。

參考資料

您可以參閱本文在developerWorks全球站點上的英文原文.

有關最新新聞和文章,請訪問MySQL主頁。

在MySQL++上查找C++與MySQL的正式接口。

Tcl GDBI( Generic Database Interface)是用在本文中Tcl示例中的Tcl MySQL API。

詳細了解用于加密 MySQL 客戶機和服務器之間所有通信的Secure Shell (ssh)。它用在不可信網絡(例如公共因特網任意部分)上進行的通信中。



全新的路由器不僅讓你更穩定快速地連接無線網絡,更可以讓家中的智能設備連接在一起。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 亚洲视频第二页| 在线免费黄色网| 91视频 - 88av| 中文字幕一区二区在线观看视频| 免费在线激情视频| www国产黄色| 欧洲黄色一级视频| 日韩精品视频久久| 欧美性大战久久久久xxx| 国产极品尤物在线| 免费观看精品视频| 激情五月婷婷久久| 天天干天天干天天干天天干天天干| 久久精品免费一区二区| 国产a级一级片| 九九热在线免费| 成人性生交免费看| 欧美爱爱视频网站| 欧美亚洲黄色片| 国产二区视频在线播放| 欧洲熟妇精品视频| 三上悠亚av一区二区三区| 手机在线视频一区| www.av蜜桃| 人人爽人人av| 国产盗摄视频在线观看| 拔插拔插海外华人免费| 欧美激情成人网| 伊人五月天婷婷| 男人天堂1024| 日韩av加勒比| 欧美视频在线免费播放| 亚洲一区在线不卡| 欧美黄网在线观看| 三上悠亚在线一区二区| 91手机视频在线| 国模杨依粉嫩蝴蝶150p| 国产精品久久成人免费观看| 老太脱裤让老头玩ⅹxxxx| jizz大全欧美jizzcom| 97精品国产97久久久久久粉红| 国产av天堂无码一区二区三区| 亚洲少妇久久久| 免费在线看黄色片| www.久久av.com| av免费看网址| 日韩欧美国产片| 成人一区二区免费视频| 国内外免费激情视频| 特级毛片在线免费观看| 国产视频一区二区三区在线播放| 国产不卡的av| 在线能看的av网站| 中文字幕欧美人妻精品一区| 狠狠干视频网站| 青青草久久伊人| 国产精品亚洲二区在线观看| 激情五月婷婷六月| 50度灰在线观看| 超碰中文字幕在线观看| 久久99爱视频| av网站在线不卡| 熟女人妇 成熟妇女系列视频| 国产免费一区二区视频| 国产激情在线看| 日韩欧美猛交xxxxx无码| 青少年xxxxx性开放hg| 亚洲一级片网站| 男生操女生视频在线观看| 91蝌蚪视频在线观看| 久久成人免费观看| 99爱视频在线| 成年人视频在线免费| 中文字幕第80页| 中文字幕 91| 亚洲欧美日韩精品一区| 伊人国产精品视频| 91九色国产ts另类人妖| 成人免费网站入口| 国产一区二区视频播放| 中文字幕乱码人妻综合二区三区 | 天天爽天天爽夜夜爽| 亚洲黄色a v| 久久婷婷中文字幕| 国产911在线观看| 欧美精品自拍视频| 乱子伦视频在线看| 中文字幕免费高清在线| | 一道本在线免费视频| 国产免费中文字幕| 国产精品视频网站在线观看| 成人在线观看你懂的| www日韩视频| 视频免费1区二区三区| 欧美日韩一级在线 | 欧美日韩激情视频在线观看| 欧美两根一起进3p做受视频| 婷婷激情四射五月天| 在线观看亚洲色图| 伊人网在线免费| 国产精品国产亚洲精品看不卡| 国产女大学生av| 色综合色综合色综合色综合| 日本久久高清视频| 午夜免费一区二区| 红桃一区二区三区| 黄色免费视频大全| 黄色a级三级三级三级| 无码 制服 丝袜 国产 另类| 国产视频一区二区三区在线播放| 亚洲精品mv在线观看| 亚洲爆乳无码专区| 福利在线一区二区| 五月天色婷婷综合| 国产美女18xxxx免费视频| 一级性生活视频| 亚洲一区二区在线视频观看| av观看免费在线| 18禁裸男晨勃露j毛免费观看| 天天影视色综合| 欧美精品无码一区二区三区| 国产精品久久中文字幕| 久久天天东北熟女毛茸茸| 亚洲一级片网站| 天堂中文视频在线| 噜噜噜久久亚洲精品国产品麻豆| wwwwww欧美| 久久久99精品视频| 超级碰在线观看| 精品国产无码在线| 日本女人高潮视频| 97精品国产97久久久久久粉红| 手机免费av片| 精品日韩在线播放| 福利在线小视频| 色爽爽爽爽爽爽爽爽| 日韩精品福利片午夜免费观看| 99亚洲精品视频| 日韩视频 中文字幕| 特级西西人体www高清大胆| 亚洲成人动漫在线| 成人在线视频一区二区三区| 免费cad大片在线观看| 中文字幕人妻熟女人妻洋洋| 野外做受又硬又粗又大视频√| 69sex久久精品国产麻豆| 青青青国产在线观看| av动漫免费看| 五月激情五月婷婷| 欧美在线观看视频免费| 国产高清av在线播放| 日韩在线xxx| 免费一区二区三区在线观看| 天天在线免费视频| 美女日批免费视频| 少妇黄色一级片| 中文字幕黄色大片| 久久成人免费观看| 日本高清久久久| 免费观看亚洲视频| 一级在线免费视频| 2021狠狠干| 日韩视频免费在线播放| √天堂资源在线| 久久久久久久久久网| 国产九九在线视频| 日本黄色片一级片| 香港日本韩国三级网站| 日本人妻伦在线中文字幕| 久久综合久久色| av中文字幕av| 欧美日韩国产精品激情在线播放| 中文字幕 日韩 欧美| 99爱视频在线| 四虎4hu永久免费入口| 成年人在线观看视频免费| 妺妺窝人体色www看人体| 伊人影院综合在线| 男人用嘴添女人下身免费视频| av噜噜在线观看| 欧美激情精品久久久久久小说| 神马午夜伦理影院| 福利片一区二区三区| 国产一级片黄色| koreanbj精品视频一区| 一区二区三区四区免费观看| 欧美精品性生活| 熟妇人妻va精品中文字幕| 国内精品视频一区二区三区| www.久久久久久久久久久| 亚洲欧美另类动漫| 久久精品香蕉视频| 精品无码一区二区三区在线| 国产精品一二三在线观看| 亚洲一级片免费观看| 性久久久久久久久久久久久久| 性生生活大片免费看视频| 日本在线播放一区二区| 黄大色黄女片18第一次|