php 链接mysql的三种方式对比

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 // 编码转化为 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的连接方式 

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注入问题,有很好的安全性。不过他也有缺点,某些多语句执行查询不支持(不过该情况很少)。

官方比较:

 

posted @ 2018-03-01 12:32  逗豆~  阅读(1101)  评论(0编辑  收藏  举报