php 連接mysql的三種方式對比

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 }
View Code

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 }
View Code

PDO是PHP Data Objects的縮寫,是PHP應用中的一個數據庫抽象層規範。PDO提供了一個統一的API接口可使得你的PHP應用不去關心具體要鏈接的數據庫服務器系統類型,也就是說,若是你使用PDO的API,能夠在任何須要的時候無縫切換數據庫服務器,好比從Oracle 到MySQL,僅僅須要修改不多的PHP代碼。其功能相似於JDBC、ODBC、DBI之類接口。一樣,其也解決了sql注入問題,有很好的安全性。不過他也有缺點,某些多語句執行查詢不支持(不過該狀況不多)。編碼

官方比較:

相關文章
相關標籤/搜索