從Web查詢資料庫:Web資料庫架構的工作原理
一個使用者的瀏覽器發出一個HTTP請求,請求特定的Web頁面,在該頁面中出發form表單提交到php腳本檔案(如:results.php)中處理
Web伺服器接收到對results.php頁面的請求後,檢索文件,並將其傳遞給PHP引擎處理
PHP引擎開始解析腳本。腳本主要包括了連接資料庫和執行查詢的命令。 PHP啟動了對MySQL伺服器的連線並向該伺服器發送適當的查詢。
MySQL伺服器接收到資料庫查詢的請求,開始處理這個查詢,並將查詢結果傳回PHP引擎。
PHP引擎完成了腳本的運行後,將該HTML傳回Web伺服器。
Web伺服器再將HTML回傳給客戶端瀏覽器,使用者就可以看到回應後的結果頁。
從Web查詢資料庫的基本步驟
檢查並過濾來自使用者的資料首先,我們將過濾使用者可能在其搜尋條件的起始或結束位置不小心輸入的空白字符,這是用函數trim( )來實現。 我們這麼麻煩的檢查用戶輸入資料的原因是防止多個介面連接資料庫,因為使用者從不同的介面進入,這可能會導致安全問題。
然後,當準備使用使用者輸入的任何資料時,也要適當的過濾一些控製字符,當使用者輸入資料到資料庫時必須轉義數據,,此時使用盜的函數有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語句的使用。它們對於在執行大量具有不同資料的相同查詢時,可以提高速度,也可以免受SQL注射風格(injection-stytle——的攻擊。
prepared語句的基本思想是可以向MySQL發送一個需要執行的查詢模板,然後在單獨發送資料。 🎜>1、建構模板。處理的資源。 int4)或mysqli_stmt_bind_param("sssd",$str1,$str3,$str3,$int4) 告訴php那些變數應該被問號取代。
3、呼叫$stmt->execute()或mysqli_stmt_execute()函數,將真正執行這個query語句
對於select型別查詢,可以使用$stmt->bind_result()或mysqli_stmt_bind_result()函數提供希望填入結果列的變數列表,然後每次呼叫$stmt->fetch()或mysqli_stmt_fetch()函數時,結果集下一行的值將填入這些綁定變數中。介面
PHP支援連接到許多不同資料庫的函數,包括Oracle、Microsoft SQL Server和PostgreSQL。沒有提供支援的特殊資料庫,可以使用常規的ODBC函數。不能使用任何資料庫的特殊功能。但要提前安裝抽象層,例如安裝PEAR MDB2抽象層。
以上就介紹了take me home country roads 從Web查詢資料庫之PHP與MySQL篇,包括了take me home country roads方面的內容,希望對PHP教程有興趣的朋友有所幫助。