PHP鏈接Mysql的三種方式:
php
1.原生的鏈接方式
mysql
原生的鏈接方式是面向過程的寫法sql
<?php $host = 'localhost'; $database = 'test'; $username = 'root'; $password = 'root'; $selectName = 'harry';//要查找的用戶名,通常是用戶輸入的信息 $insertName = 'testname'; $connection = mysql_connect($host, $username, $password);//鏈接到數據庫 mysql_query("set names 'utf8'");//編碼轉化 if (!$connection) { die("could not connect to the database.\n" . mysql_error());//診斷鏈接錯誤 } $selectedDb = mysql_select_db($database);//選擇數據庫 if (!$selectedDb) { die("could not to the database\n" . mysql_error()); } $selectName = mysql_real_escape_string($selectName);//防止SQL注入 $query = "select * from user where name = '$selectName'";//構建查詢語句 $result = mysql_query($query);//執行查詢 if (!$result) { die("could not to the database\n" . mysql_error()); } while ($row = mysql_fetch_row($result)) { //取出結果並顯示 $name = $row[0]; $age = $row[1]; echo "Name: $name Age: $age \n"; }
PHP的MySQL擴展是設計開發容許php應用與MySQL數據庫交互的早期擴展。MySQL擴展提供了一個面向過程的接口,而且是針對MySQL4.1.3或者更早版本設計的。所以這個擴展雖然能夠與MySQL4.1.3或更新的數據庫服務端進行交互,但並不支持後期MySQL服務端提供的一些特性。因爲太古老,又不安全,因此已被後來的mysqli徹底取代;數據庫
2.Mysqli的鏈接方式 數組
PHP與Mysqli擴展,面向過程、對象安全
1 <?php 2 $host = 'localhost'; 3 $database = 'test'; 4 $username = 'root'; 5 $password = 'root'; 6 $selectName = 'harry';//要查找的用戶名,通常是用戶輸入的信息 7 $insertName = 'testname'; 8 9 // 建立對象並打開鏈接,最後一個參數是選擇的數據庫名稱 10 $mysqli = new mysqli($host, $username, $password, $database); 11 12 // 編碼轉化爲 utf8 13 if (!$mysqli->set_charset("utf8")) { 14 printf("Error loading character set utf8: %s\n", $mysqli->error); 15 } else { 16 printf("Current character set: %s\n", $mysqli->character_set_name()); 17 } 18 19 if (mysqli_connect_errno()) { 20 // 診斷鏈接錯誤 21 die("could not connect to the database.\n" . mysqli_connect_error()); 22 } 23 24 $selectedDb = $mysqli->select_db($database);//選擇數據庫 25 if (!$selectedDb) { 26 die("could not to the database\n" . mysql_error()); 27 } 28 29 if ($stmt = $mysqli->prepare("select * from user where name = ?")) { 30 /* bind parameters for markers */ 31 $stmt->bind_param("s", $selectName); 32 /* execute query */ 33 $stmt->execute(); 34 /* bind result variables */ 35 $stmt->bind_result($name, $age); 36 37 /* fetch values */ 38 while ($stmt->fetch()) { 39 echo "Name: $name Age: $age \n"; 40 } 41 /* close statement */ 42 $stmt->close(); 43 }
PHP的mysqli擴展,咱們有時稱之爲MySQL加強擴展,能夠用於使用 MySQL4.1.3或更新版本中新的高級特性。其特色爲:面向對象接口 、prepared語句支持、多語句執行支持、事務支持 、加強的調試能力、嵌入式服務支持 、預處理方式徹底解決了sql注入的問題。不過其也有缺點,就是隻支持mysql數據庫。若是你要是不操做其餘的數據庫,這無疑是最好的選擇。服務器
3.PDO的鏈接方式 ide
PHP與PDO擴展,面向過程、對象fetch
1 <?php 2 $host = 'localhost'; 3 $database = 'test'; 4 $username = 'root'; 5 $password = 'root'; 6 $selectName = 'harry';//要查找的用戶名,通常是用戶輸入的信息 7 $insertName = 'testname'; 8 9 $pdo = new PDO("mysql:host=$host;dbname=$database", $username, $password);//建立一個pdo對象 10 $pdo->exec("set names 'utf8'"); 11 $sql = "select * from user where name = ?"; 12 $stmt = $pdo->prepare($sql); 13 $rs = $stmt->execute(array($selectName)); 14 15 if ($rs) { 16 // PDO::FETCH_ASSOC 關聯數組形式 17 // PDO::FETCH_NUM 數字索引數組形式 18 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 19 $name = $row['name']; 20 $age = $row['age']; 21 echo "Name: $name Age: $age \n"; 22 } 23 }
PDO是PHP Data Objects的縮寫,是PHP應用中的一個數據庫抽象層規範。PDO提供了一個統一的API接口可使得你的PHP應用不去關心具體要鏈接的數據庫服務器系統類型,也就是說,若是你使用PDO的API,能夠在任何須要的時候無縫切換數據庫服務器,好比從Oracle 到MySQL,僅僅須要修改不多的PHP代碼。其功能相似於JDBC、ODBC、DBI之類接口。一樣,其也解決了sql注入問題,有很好的安全性。不過他也有缺點,某些多語句執行查詢不支持(不過該狀況不多)。編碼
官方比較: