標籤:服務端 one cape 寫法 參數 mys bind word charset
PHP串連Mysql的三種方式:
1.原生的串連方式
原生的串連方式是面向過程的寫法
<?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 // 編碼轉化為 utf813 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 }View Code
PHP的mysqli擴充,我們有時稱之為MySQL增強擴充,可以用於使用 MySQL4.1.3或更新版本中新的進階特性。其特點為:物件導向介面 、prepared語句支援、多語句執行支援、事務支援 、增強調試能力、嵌入式服務支援 、預先處理方式完全解決了sql注入的問題。不過其也有缺點,就是只支援mysql資料庫。如果你要是不操作其他的資料庫,這無疑是最好的選擇。
3.PDO的串連方式
PHP與PDO擴充,面向過程、對象
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 }View Code
PDO是PHP Data Objects的縮寫,是PHP應用中的一個資料庫抽象層規範。PDO提供了一個統一的API介面可以使得你的PHP應用不去關心具體要串連的資料庫伺服器系統類別型,也就是說,如果你使用PDO的API,可以在任何需要的時候無縫切換資料庫伺服器,比如從Oracle 到MySQL,僅僅需要修改很少的PHP代碼。其功能類似於JDBC、ODBC、DBI之類介面。同樣,其也解決了sql注入問題,有很好的安全性。不過他也有缺點,某些多語句執行查詢不支援(不過該情況很少)。
官方比較:
php 連結mysql的三種方式對比