999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

PHP語言中mysql與mysqli應用淺析

2020-08-21 09:09:32朱飛劉曼琳
數字技術與應用 2020年7期

朱飛 劉曼琳

摘要:mysql與mysqli都是PHP語言中的函數。mysql只能用于PHP前期的版本中,在PHP5.5以后的版本中就無法使用了。由于MySQL數據庫的擴展和不斷更新,mysql函數不能與之相適應,而mysqli函數可以很好地解決這一問題。本文結合PHP語言,從連接方式、相關類和mysqli的使用方法對進行闡述。最后通過一個實例對比分析二者應用的區別。

關鍵詞:php語言;mysql函數;mysqli函數;MySQL數據庫

中圖分類號:TP311.1 文獻標識碼:A 文章編號:1007-9416(2020)07-0038-04

很多編程語言都能和MySQL數據庫搭配使用。但是對于輕量級的開發語句PHP來說,MySQL數據庫可以說是最佳搭檔。PHP對mysql的擴展始終跟隨MySQL數據庫的發展,如果使用mysql擴展庫中的函數,在PHP訪問MySQL數據庫時就會更加簡單、便捷[1]。在PHP之前的舊版本中,mysql函數可以使用一個面向過程的接口。但隨著MySQL數據庫的不斷發展,mysql函數不能在MySQL4.1以后的版本中運用,為了很好地解決這個問題,mysqli應運而生。本文著重對PHP中mysql和mysqli的應用情況進行比較,其中包括服務器的連接、數據庫的選擇和數據庫的關閉等幾個方面。

1 mysql與mysqli簡介

1.1 mysql簡介

在PHP中的mysql函數的功能是允許用戶訪問MySQL數據庫服務器。在編譯PHP時要添加對MySQL的支持。在Windows系統上,PHP4版本中,mysql的相關擴展已經編譯入PHP。而PHP5以后是默認未啟動的,所以需要在phpin中激活php_mysql.dll動態鏈接庫。

1.2 mysqli簡介

mysqli也是用來處理database關系型數據庫的函數,從表面上看比mysql多了一個i。這個i在這里就相當于是improvement,可以理解為mysql的增強版本,在這個版本中包括了更多豐富的功能。mysqli可以配合MySQL4.1.13以后的服務端版本工作。對于mysqli來說,本身也增加了安全性,尤其是在SQL注入方面。需要注意的一點只有在PHP5或者MySQL4.1以后的版本中才能使用mysqli。mysqli的優點有很多,比如: 在面向對象接口、多語句執行、事務支持、prepared語言支持、嵌入式服務以及調試能力等方面[2]。

由于mysqli擴展的各種優勢,以及強大的面向對象開發能力,到PHP5.3的時候,原來的mysql擴展已經被標注為過時。而到了PHP7,原mysql擴展被徹底廢棄。所以目前不管是否使用PHP7,一般都是用使用mysqli或pdo擴展來操作MySQL數據庫。

2 mysql與mysqli的比較

2.1 連接方面

2.1.1 mysql的連接

mysql這個函數擁有非粘合連接功能。非持續連接函數的意思是每一個請求或者響應都需要單獨的發送TCP連接請求,每一個 TCP連接只能用來傳輸一個響應報文和一個請求報文,在傳輸后就立刻關閉連接。也就意味著mysql每次連接都需要開啟一個連接的進程,與服務器建立關系,這樣每次訪問MySQL服務器都需要消耗不少的資源。

2.1.2 mysqli的連接

mysqli函數擁有永久連接功能。永久連接函數的意思是所有的請求都使用同一個TCP連接發送,當服務器發送響應后,TCP連接保持打開。所以說在mysqli的不同次數運行中是可以使用相同的連接進程的,這樣就降低了服務器的開銷。在擴展速度這一方面,mysqli擴展的執行速度遠遠超過了早期的mysql版本[3]。

2.2 相關類

由于mysqli擴展被封裝成一個類,所以能夠使用面向對象的方法進行編程,不過也可以使用面向過程的方式[4]。但是眾所周知,在對性能的要求不是特別高時,應首選面向對象的方式,因為面向對象有著易于維護、擴展,低耦合等眾多的優點。 mysqli擴展還有一個特性,就是能夠支持預處理語言。這樣不僅提升了SQL語句多次執行的性能,還改善了mysqli擴展的調試能力,使編程效率得到了明顯的提升。mysqli擴展不僅包含了mysql中所有的功能還添加了3個類,分別是mysqli、mysqli_result和mysqli_stmt。其中mysqli_stmt是完成mysqli預處理語句的重要類。 在mysqli中這三個類相互配合使用,以便于完成對MySQL數據庫的連接、數據操作和預處理等內容。

2.3 使用方面

當需要用到new mysqli()時,要對php.ini文件進行配置。因為mysqli類并不是自動開啟的。在windows系統的配置文件php.ini中,把”extension=php_mysqli.dll”前面的”;”刪除,并且保存。然后關閉php.ini文件,并重新啟動Apache。mysqli.dll既可以用對象的方式操作數據庫,也可以用過程的方式操作數據庫。關于mysqli.dll的特點總結有以下幾個方面:

(1)可以和mysql.dll一樣的方式使用。

(2)支持OO接口,簡單調用。

(3)支持MYSQL4.1引入的新特性。

(4)能夠使用mysqli_init()等一系列的函數,來進行連接選項的高級設置。

為了與mysql.dll做一個比較,以下就列舉一些經常能夠使用到的操作:

(1)mysqli.dll的面向過程方式操作。

$conn = mysqli_connect(“localhost”,”root”,””);// 創建連接

$select=mysqli_select_db($conn,”lml_db”);//選擇名為lml_db的數據庫

$result=mysqli_query($conn,”select * from user”);//執行SQL語句,這里以查詢user表中所有內容為例

$row=mysqli_fetch_row($result);//為了簡單這里只取一行數據

echo $row[0];//輸出第一個字段值

mysqli_close($conn);//關閉連接

mysql也有面向過程的方法,在mysql面向過程的方法中只是把mysqli換成mysql,具體區別和使用方法將在下文中詳細講述。假如mysqli是以面向過程的方法操作的話,有些函數必需要有特定資源。例如mysqli_ query()這個函數,在這個函數中有三個參數,分別$ conn數據可靠的連接標識、$ query需要執行的SQL語句和一個常量$ resultmode,這個常量通常由兩個選項,一般使用默認值MYSQLI_ STORE_ RESULT,這里不再詳細展開。我們重點需要注意的是前兩個參數$conn和$query,這二者的順序不能改變,數據庫的連接標識$conn必須放在需要執行的SQL語句之前。 這一點和mysql_query()是不一樣的。mysql_ query()有兩個參數,第一個就是$ query需要執行的 SQL語句,第二個是$ conn數據庫的連接標識,并且第二個參數$ conn數據庫的連接標識不是必要的。在沒有定義的情況下,也就是默認狀態,會直接使用上一個打開的連接。 而且mysql_select_db和mysqli_select_db的參數剛好相反。這里需要重點強調的是 php5.5無法使用mysql_query,需要用mysqli_query。

(2)mysqli.dll的面向對象方式操作。

$conn = new mysqli(“localhost”,”root”,””);//創建連接

$conn->select_db(“lml_db”);//選擇名為lml_db的數據庫

/*也可以在創建連接時就指定需要選擇的數據庫:$conn = new mysqli(“localhost”,”root”,””,”lml_db”);*/

$result=$conn->query(“select * from user”);//執行SQL語句,這里以查詢user表中所有內容為例

$row=$result->fetch_row();//為了簡單這里只取一行數據

echo $row[0];//輸出第一個字段值

$conn->close();//關閉連接

在mysql中沒有此類方式連接。在下文中著重進行對比mysql和mysqli的面向過程方式之間的區別。

3 mysql與mysqli連接例析

以人員信息管理系統的添加用戶功能為例。首先在MySQL數據庫中創建一個數據庫,名為lml_db,在lml_db數據庫中創建用戶表user。user表中包含序號(id)、姓名(name)、入職日期(time)、年齡(age)和聯系方式(pnumber)。

PHP程序在與MySQL交互前需要先連接成功,然后在執行SQL命令,具體流程圖和步驟如圖1。

3.1 mysqli連接數據庫的方式

3.1.1 連接數據庫服務器

要操作MySQL數據庫,必須與MySQL服務器建立連接,在PHP中通過mysqli_connect()函數來實現。代碼如下:

$host=”localhost”;

$user=”root”;

$pass=””;

$conn=mysqli_connect($host,$user,$pass);

其中$host是MySQL服務器的主機名稱(或IP),localhost是本機的意思;$user是登錄服務器的用戶名,默認用戶名為root;$pass是服務器的用戶密碼,默認為空。

3.1.2 選擇MySQL服務器中需要使用到的數據庫

與MySQL數據庫服務器連接成功后,使用mysqli_ select_db()函數選擇服務器中需要使用到的數據庫。

$select=mysqli_select_db($conn,”lml_db”);

其中參數$conn是MySQL服務器的連接標識符;lml_db是要選擇的數據庫名稱。

3.1.3 執行SQL語句

在PHP中用mysqli_query()函數來執行對數據庫操作的SQL語句。mysqli_query()函數的語法如下:

$result=mysqli_query($conn,$sql);

其中參數$conn是MySQL服務器的連接標識符;參數$sql是傳入的SQL語句,包括插入語句、刪除語句、修改語句、查詢語句。增添用戶使用到的是插入語句,例如,將姓名為王明、入職時間為2018年12月、年齡24歲、手機號為15505532271的人員信息插入到user表中,具體代碼如下:

$insert_sql=”insert into user (name,time,age,pnumber) values (‘王明,2018.12,24,15505532271)”;

然后執行插入語句,據以代碼如下:

$result=mysqli_query($conn,$insert_sql);

3.1.4 關閉連接

當我們對數據庫進行連接時,每次使用到mysqli_ connect()或mysqli_ query()函數,都會損耗一定的系統資源。如果在用戶規模較小的情況下,去訪問網站是基本沒有問題的,但是如果用戶的數量超過了一定的規模,就會使系統的性能大幅度的下滑,嚴重情況下服務器會死機。為了防止這種情況的出現,在使用完數據庫之后,應該關閉與MySQL服務器的連接。把數據庫這個寶貴的資源讓給其他用戶繼續使用。關閉數據庫服務器連接用到的是mysqli_close()函數。該函數的語法如下:

mysqli_close($conn);

3.2 mysql連接數據庫的方式

3.2.1 連接數據庫服務器

$host=”localhost”;

$user=”root”;

$pass=””;

$conn=mysql_connect($host,$user,$pass);

3.2.2 選擇服務器中的數據庫

$select=mysql_select_db(“lml_db”);

3.2.3 執行SQL語句

$insert_sql=”insert into user (name,time,age,pnumber) values (‘王明,2018.12,24,15505532271)”;

$result=mysql_query($insert_sql);

通過上述實例可以看出以下幾點:

(1)第一步連接數據庫服務器,用法基本相同。

(2)第二步選擇服務器中的數據庫,mysqli_select_db中有兩個參數,第一個是數據庫的連接標識$conn,第二個是需要選擇的數據庫名稱,這兩個參數都是必要的,并且順序不能改變。而mysql_select_db中只有需要選擇的數據庫名稱是必需的。

(3)第三步執行是SQL語句時mysqli_query中有兩個參數,第一個是數據庫的連接標識$conn,第二個是需要執行的SQL語句,這兩個參數都是必需的,并且順序不能改變。而mysql_query中只有需要執行的SQL語句是必需的,數據庫連接標識$conn可選;如果有$conn,必須放在SQL語句之后,如果沒有$conn,使用上一個打開的連接。

(4)最后一步關閉連接,使用mysqli_connect建立的是持久連接,使用結束后必須要手動關閉mysqli_close。但是mysql_connect建立的是非持久連接,在腳本執行完后會自動的關閉,因此不需要手動關閉。這里特別要注意,如果使用mysql_pconnect建立持久連接,mysql_close無法將其關閉。

4 結語

隨著MySQL數據庫的發展,mysql已經無法滿足一些函數擴展的使用,所以逐漸的被淘汰。總體來說mysqli基本包含了mysql之前所有的功能,但是在用法上有所不同,主要是針對函數中的一些參數。而mysqli相對于mysql來說有很多比較明顯的優點,其中包括執行效率、安全性、兼容性等各個方面[5]。mysqli在構造函數和類方面更簡單,在后期的可擴展性也更為強大,并且mysqli的面向對象接口使程序代碼更加容易閱讀和理解,增強了數據訪問的穩定性。

參考文獻

[1] 王彥輝,王天平.PHP+MySQL動態網頁技術教程[M].大連:東軟電子出版社,2013.

[2] 程晨航,江妍,程仁貴.對PHP中mysqli擴展模塊的探究及應用[J].福建電腦,2015(1):26-27.

[3] 鄒天思.PHP從入門到精通[M].北京:清華大學出版社,2009.

[4] 馬曉娟.面向對象編程思想解析[J].電子技術與軟件工程,2014(21):254.

[5] 周建儒.mysqli預處理語句的技術分析[J].電子技術與軟件工程,2014(17):218.

主站蜘蛛池模板: 美女一级毛片无遮挡内谢| 日韩一二三区视频精品| 麻豆精品在线| 久久精品人人做人人爽电影蜜月| 国产成人精品在线| 亚洲日本中文字幕天堂网| 亚洲愉拍一区二区精品| 九九热视频精品在线| 日本一本正道综合久久dvd | 国产第八页| 无码高潮喷水在线观看| 天天综合亚洲| 日本免费新一区视频| 国产精品视频a| 国产亚洲精品91| 精品成人一区二区三区电影| 亚洲男人的天堂在线观看| 免费99精品国产自在现线| 色吊丝av中文字幕| 久久婷婷五月综合色一区二区| 国产精品熟女亚洲AV麻豆| 91福利片| 国产成人精品男人的天堂| 色综合天天视频在线观看| 欧洲一区二区三区无码| 夜夜拍夜夜爽| 新SSS无码手机在线观看| 美女被狂躁www在线观看| 麻豆精选在线| 亚洲日韩日本中文在线| 国产成人精品一区二区秒拍1o| 在线观看亚洲成人| 国产女人18毛片水真多1| 亚洲天堂区| 特级毛片8级毛片免费观看| 亚洲国产精品不卡在线 | 九色综合伊人久久富二代| 怡春院欧美一区二区三区免费 | 亚洲精品色AV无码看| 精品国产91爱| 欧美在线黄| 亚洲精品麻豆| 久久五月视频| 亚洲av成人无码网站在线观看| 日本午夜网站| 黄色在线不卡| 草草影院国产第一页| 人妻无码中文字幕一区二区三区| 久久这里只有精品66| 免费看久久精品99| 尤物国产在线| 久久不卡国产精品无码| 日韩无码黄色| 精品夜恋影院亚洲欧洲| 日本免费一级视频| 极品私人尤物在线精品首页| 国产成人艳妇AA视频在线| 久久久久久久蜜桃| 全部免费毛片免费播放| 高清色本在线www| 亚洲最猛黑人xxxx黑人猛交| а∨天堂一区中文字幕| 波多野衣结在线精品二区| 久久77777| 99久久亚洲精品影院| 国产91无码福利在线| 国产精品三级av及在线观看| 久久夜色精品国产嚕嚕亚洲av| 亚洲国产成人无码AV在线影院L| 国产欧美日韩91| 青青青草国产| 一区二区三区四区精品视频| av色爱 天堂网| 久久综合激情网| 8090成人午夜精品| 久久毛片网| 日韩视频免费| 99久久精品免费看国产免费软件| 成人在线天堂| 亚洲日本一本dvd高清| 国产欧美自拍视频| 亚洲狠狠婷婷综合久久久久|