最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從Web查詢數(shù)據(jù)庫之PHP與MySQL篇

 更新時間:2009年09月25日 23:55:09   作者:  
PHP+MySQL的組合是構(gòu)建網(wǎng)站的一個常見搭配,不過如何使用PHP通過Web訪問MySQL數(shù)據(jù)庫呢?下面從Web數(shù)據(jù)庫架構(gòu)的工作原理講起。
從Web查詢數(shù)據(jù)庫:Web數(shù)據(jù)庫架構(gòu)的工作原理
一個用戶的瀏覽器發(fā)出一個HTTP請求,請求特定的Web頁面,在該頁面中出發(fā)form表單提交到php腳本文件(如:results.php)中處理
Web服務(wù)器接收到對results.php頁面的請求后,檢索文件,并將其傳遞給PHP引擎處理
PHP引擎開始解析腳本。腳本主要包括了連接數(shù)據(jù)庫和執(zhí)行查詢的命令。PHP啟動了對MySQL服務(wù)器的連接并向該服務(wù)器發(fā)送適當(dāng)?shù)牟樵儭?
MySQL服務(wù)器接收到數(shù)據(jù)庫查詢的請求,開始處理這個查詢,并將查詢結(jié)果返回給PHP引擎。
PHP引擎完成了腳本的運(yùn)行后,將該HTML返回Web服務(wù)器。
Web服務(wù)器再將HTML返回給客戶端瀏覽器,用戶就可以看到響應(yīng)后的結(jié)果頁面。
從Web查詢數(shù)據(jù)庫的基本步驟
檢查并過濾來自用戶的數(shù)據(jù) 首先,我們將過濾用戶可能在其搜索條件的起始或結(jié)束位置不小心輸入的空白字符,這是用函數(shù)trim()來實現(xiàn)。 我們這么麻煩的檢查用戶輸入數(shù)據(jù)的原因是防止多個接口連接數(shù)據(jù)庫,因為用戶從不同的界面進(jìn)入,這樣可能導(dǎo)致安全問題。
然后,當(dāng)準(zhǔn)備使用用戶輸入的任何數(shù)據(jù)時,也要適當(dāng)?shù)倪^濾一些控制字符,當(dāng)用戶輸入數(shù)據(jù)到數(shù)據(jù)庫時必須轉(zhuǎn)義數(shù)據(jù),,此時 使用盜的函數(shù)有addslashes()函數(shù)、stripslashes()函數(shù)和get_magic_qutoes_gpc()函數(shù)。addslashes()函數(shù)為了數(shù)據(jù) 庫查詢語句等的需要在某些字符前加上了反斜線;stripslashes()函數(shù)去掉字符串中的反斜線字符;get_magic_qutoes_gpc()函數(shù) 魔術(shù)添加轉(zhuǎn)義字符 “\”,獲取當(dāng)前活動配置magic_quotes_runtime設(shè)置,如果運(yùn)行時關(guān)閉魔術(shù)引號,返回0,否則返回1。我們也可以使用 htmispecialchars()對HTML中的特殊意義字符警醒編碼,htmispecialchars()函數(shù)把一些預(yù)定義的字符轉(zhuǎn)換為 HTML 實體 【預(yù)定義的字符是:& (和號) 成為 & " (雙引號) 成為 " ' (單引號) 成為 ' < (小于) 成為 < > (大于) 成為 >】
建立一個到適當(dāng)數(shù)據(jù)庫的連接 PHP為連接MySQL提供了函數(shù)庫mysqli(i表示改進(jìn))。
當(dāng)在PHP中使用mysqli函數(shù)庫是可以使用面向?qū)ο蠡蛎嫦蜻^程的語法:
1、面向?qū)ο螅?@ $db = new mysqli('hostname','username','password','dbname');返回一個對象
2、面向過程: @ $db = mysqli_connect('hostname','username','password','dbname');返回一個資源,這個資源表示數(shù)據(jù)庫的連接,而且 如果使用過程方法,必須將這個資源傳遞到mysqli的所有其它函數(shù)。這與處理函數(shù)非常類似
mysqli的大多數(shù)函數(shù)都有面向?qū)ο蠼涌诤瓦^程接口,二者的差異則在于過程版本的函數(shù)名稱以mysqli_開頭,同時要求傳入mysqli_connect()函數(shù)獲得的資源句柄。 對于這個規(guī)則來說,數(shù)據(jù)可連接是一個異常,因為它是由mysqli對象的構(gòu)造函數(shù)來創(chuàng)建的。因此嘗試連接時需要進(jìn)行檢查,mysqli_connect_errno()函數(shù)將在出現(xiàn)連接 錯誤時返回一個錯誤號,如果成功,則返回0.

請注意:
當(dāng)連接到數(shù)據(jù)庫是,通常會議錯誤抑制符@作為第一含代碼。這樣可以巧妙的處理任何錯誤,也可以通過異常來處理。另外,MySQK對同時連接 數(shù)據(jù)庫的連接數(shù)量有一定的限制。MySQLi參數(shù)max_connections決定了同時連接的個數(shù),該參數(shù)和相關(guān)的Apache參數(shù)MaxClients的作用是告訴服務(wù)器拒絕新的連接請求, 從而保證系統(tǒng)資源不會再系統(tǒng)忙碌時或系統(tǒng)癱瘓時被請求或使用。要設(shè)置Apache中的MaxClients參數(shù)可以編輯系統(tǒng)中的httpd.conf文件。要為MySQLi設(shè)置max_connections參數(shù) 可以編輯文件my.conf。
選擇使用的數(shù)據(jù)庫: 在MySQL命令行使用 use dbname;命令;在php中可以用$db->select_db(dbname);或mysqli_select_db(db_resource,dbname)。
查詢數(shù)據(jù)庫 要執(zhí)行數(shù)據(jù)庫查詢,首先應(yīng)構(gòu)造查詢語句:$query = "select * from user";然后運(yùn)行 $result = $db->query($query);或者$result = mysqli_query($db,$query); 面向?qū)ο蟀姹緦⒎祷匾粋€結(jié)果對象;過程版本將返回一個結(jié)果資源。無論何種方法都將結(jié)果保存在$result變量中工以后使用。如果函數(shù)運(yùn)行失敗將返回false。
獲取查詢結(jié)果 使用不同的函數(shù)以不同的方式將查詢結(jié)果從結(jié)果對象或標(biāo)識符中取出來,結(jié)果對象或標(biāo)識符是訪問查詢返回行的關(guān)鍵。
通常我們要得到結(jié)果集中記錄行的行數(shù),并且使用mysqli_fetch_assoc()函數(shù)。
返回行數(shù):$num_results = $result->num_rows;(行數(shù)保存在對象的num_rows成員變量中)或$num_results = mysqli_num_rows($result);
然后使用循環(huán)遍歷每一行,在循環(huán)中調(diào)用 $row = $result->fectch_assoc();或者 $row = mysqli_fetch_assoc($result);返回該行的信息。 如果是對象返回行則每個關(guān)鍵詞為一個屬性名,每個值為屬性中的相應(yīng)的值;如果以資源返回則返回數(shù)組。
還有其他從結(jié)果標(biāo)識符中獲取結(jié)果的方法,例如:使用$row = $result->fecth_row($result);或者$row = mysqli_fetch_row($result);將結(jié)果取回 到一個列舉數(shù)組中;也可以使用$row = $result->fecth_object();或者 $row = mysqli_fecth_object($result);江一行去回到一個對象中。
從數(shù)據(jù)庫斷開 先釋放結(jié)果集:$result->free();或 mysqli_free_result($result);然后關(guān)閉數(shù)據(jù)庫連接:$db->close()或者 mysqli_close($db); 嚴(yán)格的說,這并不必須,因為腳本執(zhí)行完畢的時候他們將被自動關(guān)閉。

從Web查詢數(shù)據(jù)庫:使用Prepared語句

mysqli函數(shù)庫支持prepared語句的使用。它們對于在執(zhí)行大量具有不同數(shù)據(jù)的相同查詢時,可以提高速度,也可以免受SQL注射風(fēng)格(injection-stytle——的攻擊。
prepared語句的基本思想是可以向MySQL發(fā)送一個需要執(zhí)行的查詢模板,然后在單獨(dú)發(fā)送數(shù)據(jù)。我們可以向相同的prepared語句發(fā)送大量的相同的數(shù)據(jù);這個特性對批量處理的插入操作來說是非常有用的。

我們一般使用一下幾個步驟:
1、構(gòu)造模板。已插入為例: $query = "insert into user values(?,?,?,?)";

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

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

3、調(diào)用$stmt->execute()或者mysqli_stmt_execute()函數(shù),將真正運(yùn)行這個query語句
對于select類型查詢,可以使用$stmt->bind_result()或mysqli_stmt_bind_result()函數(shù)提供希望填充結(jié)果列的變量列表,然后每次調(diào)用 $stmt->fetch()或者mysqli_stmt_fetch()函數(shù)時,結(jié)果集下一行的值將被填充到這些綁定變量中。

使用PHP與數(shù)據(jù)庫交互的其他接口
PHP支持連接到許多不同數(shù)據(jù)庫的函數(shù),包括Oracle、Microsoft SQL Server和PostgreSQL。通常,連接和查詢這些火速據(jù)庫的基本原理是相同的,個別 函數(shù)名稱可能不同。如果希望使用PHP還沒有提供支持的特殊數(shù)據(jù)庫,可以使用常規(guī)的ODBC函數(shù)。
ODBC表示開放的數(shù)據(jù)庫連接,他是連接數(shù)據(jù)庫的標(biāo)準(zhǔn)。ODBC只具有任何函數(shù)集的優(yōu)先功能,如果要求必須兼容所有的數(shù)據(jù)庫,就不能使用任何數(shù)據(jù)庫的特殊功能。
除了PHP附帶的函數(shù)庫以外,一些可供使用的數(shù)據(jù)庫抽象類如MDB2允許為不同的數(shù)據(jù)庫類型使用相同的函數(shù)名。但是要提前安裝抽象層,例如安裝PEAR MDB2抽象層。

相關(guān)文章

  • 為何說PHP引用是個坑,要慎用

    為何說PHP引用是個坑,要慎用

    在PHP 中引用的意思是用不同的名字訪問同一個變量內(nèi)容。與在C語言中的指針不同:例如不能對引用做指針運(yùn)算,引用并不是實際的內(nèi)存地址。下面這篇文章主要給大家介紹了關(guān)于為何說PHP引用是個坑,要慎用的相關(guān)資料,需要的朋友可以參考下。
    2018-04-04
  • php中時間軸開發(fā)(剛剛、5分鐘前、昨天10:23等)

    php中時間軸開發(fā)(剛剛、5分鐘前、昨天10:23等)

    php中時間軸開發(fā),即顯示為“剛剛”、“5分鐘前”、“昨天10:23”等
    2011-10-10
  • 用PHP實現(xiàn)遞歸循環(huán)每一個目錄

    用PHP實現(xiàn)遞歸循環(huán)每一個目錄

    很多時候我們要遍歷一個文件夾里面的所有目錄,列出里面所有的文件,PHP本身自帶的有一個readdir的函數(shù),不過只能讀取當(dāng)前的目錄,根據(jù)這個函數(shù),我寫了另外一個函數(shù),用來實現(xiàn)我的需求。
    2010-08-08
  • PHP編程實現(xiàn)csv文件導(dǎo)入mysql數(shù)據(jù)庫的方法

    PHP編程實現(xiàn)csv文件導(dǎo)入mysql數(shù)據(jù)庫的方法

    這篇文章主要介紹了PHP編程實現(xiàn)csv文件導(dǎo)入mysql數(shù)據(jù)庫的方法,涉及php文件讀取、轉(zhuǎn)換、數(shù)據(jù)庫的連接、插入等相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • 基于php導(dǎo)出到Excel或CSV的詳解(附utf8、gbk 編碼轉(zhuǎn)換)

    基于php導(dǎo)出到Excel或CSV的詳解(附utf8、gbk 編碼轉(zhuǎn)換)

    本篇文章是對php導(dǎo)出到Excel或CSV(附utf8、gbk 編碼轉(zhuǎn)換)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 修改PHP腳本使WordPress攔截垃圾評論的方法示例

    修改PHP腳本使WordPress攔截垃圾評論的方法示例

    這篇文章主要介紹了修改PHP腳本使WordPress攔截垃圾評論的方法示例,主要是通過修改主題的functions.php來實現(xiàn)相關(guān)功能,需要的朋友可以參考下
    2015-12-12
  • 詳解PHP偽靜態(tài)的實現(xiàn)方法

    詳解PHP偽靜態(tài)的實現(xiàn)方法

    偽靜態(tài)技術(shù)通過將動態(tài)URL轉(zhuǎn)換為靜態(tài)樣式,不僅提高了用戶體驗,也增強(qiáng)了搜索引擎的抓取效率,本文將詳細(xì)介紹什么是偽靜態(tài),以及如何在?PHP中實現(xiàn)偽靜態(tài),需要的可以了解下
    2024-11-11
  • PHP獲取文件擴(kuò)展名的4種方法

    PHP獲取文件擴(kuò)展名的4種方法

    這篇文章主要介紹了PHP獲取文件擴(kuò)展名的4種方法,涉及PHP針對字符串與數(shù)組及上傳文件屬性等相關(guān)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • PHP實現(xiàn)鏈?zhǔn)讲僮鞯娜N方法詳解

    PHP實現(xiàn)鏈?zhǔn)讲僮鞯娜N方法詳解

    這篇文章主要介紹了PHP實現(xiàn)鏈?zhǔn)讲僮鞯娜N方法,結(jié)合實例形式分析了php鏈?zhǔn)讲僮鞯南嚓P(guān)實現(xiàn)技巧與使用注意事項,需要的朋友可以參考下
    2017-11-11
  • PHP實現(xiàn)適用于文件內(nèi)容操作的分頁類

    PHP實現(xiàn)適用于文件內(nèi)容操作的分頁類

    這篇文章主要為大家詳細(xì)介紹了PHP實現(xiàn)適用于文件內(nèi)容操作的分頁類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06

最新評論

元朗区| 新余市| 寿光市| 余姚市| 天全县| 仁布县| 尼勒克县| 恩施市| 荔浦县| 深州市| 满洲里市| 鹤峰县| 广昌县| 临朐县| 台安县| 鞍山市| 甘肃省| 定日县| 堆龙德庆县| 昭通市| 璧山县| 婺源县| 琼中| 南华县| 临沧市| 舒城县| 炉霍县| 吉首市| 青河县| 罗甸县| 武宣县| 郎溪县| 霍林郭勒市| 商丘市| 手游| 永寿县| 荣成市| 新竹县| 保靖县| 当雄县| 莎车县|