PHP+MySQL的組合是構建網站的一個常見搭配,不過如何使用通過Web訪問庫呢?下面從Web數據庫架構的工作原理講起。
從Web查詢數據庫:Web數據庫架構的工作原理
一個的瀏覽器發出一個HTTP請求,請求特定的Web頁面,在該頁面中出發form表單提交到php腳本文件(如:results.php)中處理
Web服務器接收到對results.php頁面的請求后,檢索文件,并將其傳遞給PHP引擎處理
PHP引擎開始解析腳本。腳本主要包括了連接數據庫和執行的命令。PHP啟動了對MySQL服務器的連接并向該發送適當的查詢。
MySQL服務器接收到數據庫查詢的請求,開始處理這個查詢,并將查詢結果返回給PHP引擎。
PHP引擎完成了腳本的運行后,將該返回Web服務器。
Web服務器再將HTML返回給客戶端瀏覽器,用戶就可以看到響應后的結果頁面。
從Web查詢數據庫的基本步驟
檢查并過濾來自用戶的數據 首先,我們將過濾用戶可能在其搜索條件的起始或結束位置不小心輸入的空白字符,這是用函數()來實現。 我們這么麻煩的檢查用戶輸入數據的原因是防止多個接口連接數據庫,因為用戶從不同的界面進入,這樣可能導致安全問題。
然 后,當準備使用用戶輸入的任何數據時,也要適當的過濾一些控制字符,當用戶輸入數據到數據庫時必須轉義數據,,此時 使用盜的函數有addslashes()函數、stripslashes()函數和get_magic_qutoes_gpc()函數。 addslashes()函數為了數據 庫查詢語句等的需要在某些字符前加上了反斜線;stripslashes()函數去掉字符串中的反斜線字 符;get_magic_qutoes_gpc()函數 魔術添加轉義字符 “\”,獲取當前活動配置magic_quotes_runtime設置,如果運行時關閉魔術引號,返回0,否則返回1。我們也可以使用 htmispecialchars()對HTML中的特殊意義字符警醒編碼,htmispecialchars()函數把一些預定義的字符轉換為 HTML 實體 【預定義的字符是:& (和號) 成為 & " (雙引號) 成為 " ' (單引號) 成為 ' < (小于) 成為 < > (大于) 成為 >】
建立一個到適當數據庫的連接 PHP為連接MySQL提供了函數庫mysqli(i表示改進)。
當在PHP中使用mysqli函數庫是可以使用面向對象或面向過程的語法:
1、面向對象, @ $db = new mysqli('hostname','username','password','dbname');返回一個對象
2、 面向過程: @ $db = mysqli_connect('hostname','username','password','dbname');返回一個資源,這個資源表示數 據庫的連接,而且 如果使用過程方法,必須將這個資源傳遞到mysqli的所有其它函數。這與處理函數非常類似
mysqli的大多數函數都 有面向對象接口和過程接口,二者的差異則在于過程版本的函數名稱以mysqli_開頭,同時要求傳入mysqli_connect()函數獲得的資源句 柄。 對于這個規則來說,數據可連接是一個異常,因為它是由mysqli對象的構造函數來創建的。因此嘗試連接時需要進行檢 查,mysqli_connect_errno()函數將在出現連接 錯誤時返回一個錯誤號,如果成功,則返回0.
請注意:
當 連接到數據庫是,通常會議錯誤抑制符@作為第一含代碼。這樣可以巧妙的處理任何錯誤,也可以通過異常來處理。另外,MySQK對同時連接 數據庫的連接數量有一定的限制。MySQLi參數max_connections決定了同時連接的個數,該參數和相關的Apache參數 MaxClients的作用是告訴服務器拒絕新的連接請求, 從而保證系統資源不會再系統忙碌時或系統癱瘓時被請求或使用。要設置Apache中的MaxClients參數可以編輯系統中的httpd.conf文 件。要為MySQLi設置max_connections參數 可以編輯文件my.conf。
選擇使用的數據庫: 在MySQL命令行使用 use dbname;命令;在php中可以用$db->select_db(dbname);或mysqli_select_db(db_resource,dbname)。
查 詢數據庫 要執行數據庫查詢,首先應構造查詢語句:$query = "select * from user";然后運行 $result = $db->query($query);或者$result = mysqli_query($db,$query); 面向對象版本將返回一個結果對象;過程版本將返回一個結果資源。無論何種方法都將結果保存在$result變量中工以后使用。如果函數運行失敗將返回 false。
獲取查詢結果 使用不同的函數以不同的方式將查詢結果從結果對象或標識符中取出來,結果對象或標識符是訪問查詢返回行的關鍵。
通常我們要得到結果集中記錄行的行數,并且使用mysqli_fetch_assoc()函數。
返回行數:$num_results = $result->num_rows;(行數保存在對象的num_rows成員變量中)或$num_results = mysqli_num_rows($result);
然 后使用循環遍歷每一行,在循環中調用 $row = $result->fectch_assoc();或者 $row = mysqli_fetch_assoc($result);返回該行的信息。 如果是對象返回行則每個關鍵詞為一個屬性名,每個值為屬性中的相應的值;如果以資源返回則返回數組。
還有其他從結果標識符中獲取結果的方 法,例如:使用$row = $result->fecth_row($result);或者$row = mysqli_fetch_row($result);將結果取回 到一個列舉數組中;也可以使用$row = $result->fecth_object();或者 $row = mysqli_fecth_object($result);江一行去回到一個對象中。
從數據庫斷開 先釋放結果集:$result->free();或 mysqli_free_result($result);然后關閉數據庫連接:$db->close()或者 mysqli_close($db); 嚴格的說,這并不必須,因為腳本執行完畢的時候他們將被自動關閉。
從Web查詢數據庫:使用Prepared語句
mysqli函數庫支持prepared語句的使用。它們對于在執行大量具有不同數據的相同查詢時,可以提高速度,也可以免受注射風格(injection-stytle
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
