<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > 從Web查詢(xún)數據庫之PHP與MySQL篇

從Web查詢(xún)數據庫之PHP與MySQL篇

作者: 時(shí)間:2017-06-12 來(lái)源:網(wǎng)絡(luò ) 收藏

+的組合是構建網(wǎng)站的一個(gè)常見(jiàn)搭配,不過(guò)如何使用通過(guò)訪(fǎng)問(wèn)數據庫呢?下面從數據庫架構的工作原理講起。

查詢(xún)數據庫:Web數據庫架構的工作原理

一個(gè)用戶(hù)的瀏覽器發(fā)出一個(gè)HTTP請求,請求特定的Web頁(yè)面,在該頁(yè)面中出發(fā)form表單提交到php腳本文件(如:results.php)中處理

Web服務(wù)器接收到對results.php頁(yè)面的請求后,檢索文件,并將其傳遞給引擎處理

PHP引擎開(kāi)始解析腳本。腳本主要包括了連接數據庫和執行查詢(xún)的命令。PHP啟動(dòng)了對服務(wù)器的連接并向該服務(wù)器發(fā)送適當的查詢(xún)。

MySQL服務(wù)器接收到數據庫查詢(xún)的請求,開(kāi)始處理這個(gè)查詢(xún),并將查詢(xún)結果返回給PHP引擎。

PHP引擎完成了腳本的運行后,將該HTML返回Web服務(wù)器。

Web服務(wù)器再將HTML返回給客戶(hù)端瀏覽器,用戶(hù)就可以看到響應后的結果頁(yè)面。

從Web查詢(xún)數據庫的基本步驟

檢查并過(guò)濾來(lái)自用戶(hù)的數據 首先,我們將過(guò)濾用戶(hù)可能在其搜索條件的起始或結束位置不小心輸入的空白字符,這是用函數trim()來(lái)實(shí)現。 我們這么麻煩的檢查用戶(hù)輸入數據的原因是防止多個(gè)接口連接數據庫,因為用戶(hù)從不同的界面進(jìn)入,這樣可能導致安全問(wèn)題。

然后,當準備使用用戶(hù)輸入的任何數據時(shí),也要適當的過(guò)濾一些控制字符,當用戶(hù)輸入數據到數據庫時(shí)必須轉義數據,,此時(shí) 使用盜的函數有addslashes()函數、stripslashes()函數和get_magic_qutoes_gpc()函數。addslashes()函數為了數據 庫查詢(xún)語(yǔ)句等的需要在某些字符前加上了反斜線(xiàn);stripslashes()函數去掉字符串中的反斜線(xiàn)字符;get_magic_qutoes_gpc()函數 魔術(shù)添加轉義字符 “”,獲取當前活動(dòng)配置magic_quotes_runtime設置,如果運行時(shí)關(guān)閉魔術(shù)引號,返回0,否則返回1。我們也可以使用 htmispecialchars()對HTML中的特殊意義字符警醒編碼,htmispecialchars()函數把一些預定義的字符轉換為 HTML 實(shí)體 【預定義的字符是: (和號) 成為 (雙引號) 成為 ' (單引號) 成為 ' (小于) 成為 > (大于) 成為 >】

建立一個(gè)到適當數據庫的連接 PHP為連接MySQL提供了函數庫mysqli(i表示改進(jìn))。
當在PHP中使用mysqli函數庫是可以使用面向對象或面向過(guò)程的語(yǔ)法:

1、面向對象, @ $db = new mysqli('hostname','username','password','dbname');返回一個(gè)對象

2、面向過(guò)程: @ $db = mysqli_connect('hostname','username','password','dbname');返回一個(gè)資源,這個(gè)資源表示數據庫的連接,而且 如果使用過(guò)程方法,必須將這個(gè)資源傳遞到mysqli的所有其它函數。這與處理函數非常類(lèi)似

mysqli的大多數函數都有面向對象接口和過(guò)程接口,二者的差異則在于過(guò)程版本的函數名稱(chēng)以mysqli_開(kāi)頭,同時(shí)要求傳入mysqli_connect()函數獲得的資源句柄。 對于這個(gè)規則來(lái)說(shuō),數據可連接是一個(gè)異常,因為它是由mysqli對象的構造函數來(lái)創(chuàng )建的。因此嘗試連接時(shí)需要進(jìn)行檢查,mysqli_connect_errno()函數將在出現連接 錯誤時(shí)返回一個(gè)錯誤號,如果成功,則返回0.

請注意:

當連接到數據庫是,通常會(huì )議錯誤抑制符@作為第一含代碼。這樣可以巧妙的處理任何錯誤,也可以通過(guò)異常來(lái)處理。另外,MySQK對同時(shí)連接 數據庫的連接數量有一定的限制。MySQLi參數max_connections決定了同時(shí)連接的個(gè)數,該參數和相關(guān)的Apache參數MaxClients的作用是告訴服務(wù)器拒絕新的連接請求, 從而保證系統資源不會(huì )再系統忙碌時(shí)或系統癱瘓時(shí)被請求或使用。要設置Apache中的MaxClients參數可以編輯系統中的httpd.conf文件。要為MySQLi設置max_connections參數 可以編輯文件my.conf。

選擇使用的數據庫: 在MySQL命令行使用 use dbname;命令;在php中可以用$db->select_db(dbname);或mysqli_select_db(db_resource,dbname)。

查詢(xún)數據庫 要執行數據庫查詢(xún),首先應構造查詢(xún)語(yǔ)句:$query = select * from user;然后運行 $result = $db->query($query);或者$result = mysqli_query($db,$query); 面向對象版本將返回一個(gè)結果對象;過(guò)程版本將返回一個(gè)結果資源。無(wú)論何種方法都將結果保存在$result變量中工以后使用。如果函數運行失敗將返回false。

獲取查詢(xún)結果 使用不同的函數以不同的方式將查詢(xún)結果從結果對象或標識符中取出來(lái),結果對象或標識符是訪(fǎng)問(wèn)查詢(xún)返回行的關(guān)鍵。

通常我們要得到結果集中記錄行的行數,并且使用mysqli_fetch_assoc()函數。

返回行數:$num_results = $result->num_rows;(行數保存在對象的num_rows成員變量中)或$num_results = mysqli_num_rows($result);

然后使用循環(huán)遍歷每一行,在循環(huán)中調用 $row = $result->fectch_assoc();或者 $row = mysqli_fetch_assoc($result);返回該行的信息。 如果是對象返回行則每個(gè)關(guān)鍵詞為一個(gè)屬性名,每個(gè)值為屬性中的相應的值;如果以資源返回則返回數組。

還有其他從結果標識符中獲取結果的方法,例如:使用$row = $result->fecth_row($result);或者$row = mysqli_fetch_row($result);將結果取回 到一個(gè)列舉數組中;也可以使用$row = $result->fecth_object();或者 $row = mysqli_fecth_object($result);江一行去回到一個(gè)對象中。

從數據庫斷開(kāi) 先釋放結果集:$result->free();或 mysqli_free_result($result);然后關(guān)閉數據庫連接:$db->close()或者 mysqli_close($db); 嚴格的說(shuō),這并不必須,因為腳本執行完畢的時(shí)候他們將被自動(dòng)關(guān)閉。

從Web查詢(xún)數據庫:使用Prepared語(yǔ)句

mysqli函數庫支持prepared語(yǔ)句的使用。它們對于在執行大量具有不同數據的相同查詢(xún)時(shí),可以提高速度,也可以免受SQL注射風(fēng)格(injection-stytle——的攻擊。

prepared語(yǔ)句的基本思想是可以向MySQL發(fā)送一個(gè)需要執行的查詢(xún)模板,然后在單獨發(fā)送數據。我們可以向相同的prepared語(yǔ)句發(fā)送大量的相同的數據;這個(gè)特性對批量處理的插入操作來(lái)說(shuō)是非常有用的。

我們一般使用一下幾個(gè)步驟:

1、構造模板。已插入為例: $query = insert into user values(?,?,?,?);

2、使用prepared語(yǔ)句,構建一個(gè)語(yǔ)句對象或需要用來(lái)完成實(shí)際處理的資源。 $stmt = $db->prepare($query);或者mysqli_stmt_prepare($query);

3、調用$stmt->bind_param(sssd,$str1,$str3,$str3,$int4)或者mysqli_stmt_bind_param(sssd,$str1,$str3,$str3,$int4) 告訴php那些變量應該被問(wèn)號所替換。第一個(gè)參數是一個(gè)格式化字符串,后面是將要被替換的變量。

3、調用$stmt->execute()或者mysqli_stmt_execute()函數,將真正運行這個(gè)query語(yǔ)句

對于select類(lèi)型查詢(xún),可以使用$stmt->bind_result()或mysqli_stmt_bind_result()函數提供希望填充結果列的變量列表,然后每次調用 $stmt->fetch()或者mysqli_stmt_fetch()函數時(shí),結果集下一行的值將被填充到這些綁定變量中。

使用PHP與數據庫交互的其他接口

PHP支持連接到許多不同數據庫的函數,包括Oracle、Microsoft SQL Server和PostgreSQL。通常,連接和查詢(xún)這些火速據庫的基本原理是相同的,個(gè)別 函數名稱(chēng)可能不同。如果希望使用PHP還沒(méi)有提供支持的特殊數據庫,可以使用常規的ODBC函數。

ODBC表示開(kāi)放的數據庫連接,他是連接數據庫的標準。ODBC只具有任何函數集的優(yōu)先功能,如果要求必須兼容所有的數據庫,就不能使用任何數據庫的特殊功能。

除了PHP附帶的函數庫以外,一些可供使用的數據庫抽象類(lèi)如MDB2允許為不同的數據庫類(lèi)型使用相同的函數名。但是要提前安裝抽象層,例如安裝PEAR MDB2抽象層。

本文引用地址:http://dyxdggzs.com/article/201706/353618.htm



關(guān)鍵詞: Web PHP MySQL

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>