php與mysql的連線有三種api介面,分別是:php的mysql擴充套件 、php的mysqli擴充套件 、php資料物件(pdo) ,下面針對以上三種連線方式做下總結,以備在不同場景下選出最優方案。
php的mysql擴充套件是設計開發允許php應用與mysql資料庫互動的早期擴充套件。mysql擴充套件提供了乙個面向過程的介面,並且是針對mysql4.1.3或者更早版本設計的。因此這個擴充套件雖然可以與mysql4.1.3或更新的資料庫服務端進行互動,但並不支援後期mysql服務端提供的一些特性。由於太古老,又不安全,所以已被後來的mysqli完全取代;
php的mysqli擴充套件,我們有時稱之為mysql增強擴充套件,可以用於使用 mysql4.1.3或更新版本中新的高階特性。其特點為:物件導向介面 、prepared語句支援、多語句執行支援、事務支援 、增強的除錯能力、嵌入式服務支援 、預處理方式完全解決了sql注入的問題。不過其也有缺點,就是只支援mysql資料庫。如果你要是不操作其他的資料庫,這無疑是最好的選擇。
pdo是php data objects的縮寫,是php應用中的乙個資料庫抽象層規範。pdo提供了乙個統一的api介面可以使得你的php應用不去關心具體要連線的資料庫伺服器系統型別,也就是說,如果你使用pdo的api,可以在任何需要的時候無縫切換資料庫伺服器,比如從oracle 到mysql,僅僅需要修改很少的php**。其功能類似於jdbc、odbc、dbi之類介面。同樣,其也解決了sql注入問題,有很好的安全性。不過他也有缺點,某些多語句執行查詢不支援(不過該情況很少)。
官文對於三者之間也做了列表性的比較:
php的mysqli擴充套件
pdophp的mysql擴充套件
引入的php版本
5.05.0
3.0之前
php5.x是否包含是是
是mysql開發狀態
活躍在php5.3中活躍
僅維護在mysql新專案中的建議使用程度
建議 - 首選
建議不建議
api的字符集支援是是
否服務端prepare語句的支援情況是是
否客戶端prepare語句的支援情況否是
否儲存過程支援情況是是
否多語句執行支援情況
是大多數
否是否支援所有mysql4.1以上功能
是大多數
否從官方給出的這份結果上來看,優先推薦msqli,其次是pdo 。而「民間」給出的結果很多是傾向於使用pdo,因為其不擔有跨庫的優點,更有讀寫速度快的特點。
1.php與mysql擴充套件(本擴充套件自 php 5.5.0 起已廢棄,並在將來會被移除),php原生的方式去連線資料庫,是面向過程的
<?php
$mysql_conf = array(
'host' => '127.0.0.1:3306',
'db' => 'test',
'db_user' => 'root',
'db_pwd' => 'root',
);$mysql_conn = @mysql_connect($mysql_conf['host'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);
if (!$mysql_conn)
mysql_query("set names 'utf8'");//編碼轉化
$select_db = mysql_select_db($mysql_conf['db']);
if (!$select_db)
$sql = "select * from user;";
$res = mysql_query($sql);
if (!$res)
while ($row = mysql_fetch_assoc($res))
mysql_close($mysql_conn);
?>
2.php與mysqli擴充套件,面向過程、物件
<?php
$mysql_conf = array(
'host' => '127.0.0.1:3306',
'db' => 'test',
'db_user' => 'root',
'db_pwd' => 'joshua317',
);$mysqli = @new mysqli($mysql_conf['host'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);
if ($mysqli->connect_errno)
$mysqli->query("set names 'utf8';");//編碼轉化
$select_db = $mysqli->select_db($mysql_conf['db']);
if (!$select_db) $sql = "select uid from user where name = 'joshua';";
$res = $mysqli->query($sql);
if (!$res)
while ($row = $res->fetch_assoc())
$res->free();
$mysqli->close();
?>
2.php與pdo擴充套件,面向過程、物件
<?php
$mysql_conf = array(
'host' => '127.0.0.1:3306',
'db' => 'test',
'db_user' => 'root',
'db_pwd' => 'joshua317',
);$pdo = new pdo("mysql:host=" . $mysql_conf['host'] . ";dbname=" . $mysql_conf['db'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);//建立乙個pdo物件
$pdo->exec("set names 'utf8'");
$sql = "select * from user where name = ?";
$stmt = $pdo->prepare($sql);
$stmt->bindvalue(1, 'joshua', pdo::param_str);
$rs = $stmt->execute();
if ($rs)
}$pdo = null;//關閉連線
PHP三種連線mysql方式
主要分為兩種,一是通過mysqli方式,另外是通過pdo mysqli方式只能連線mysql資料庫,而pdo方式可以連線12種資料庫,便於資料庫切換 一 mysqli方式 分為面向過程和物件導向兩種不同的方式 1.mysqli 面向過程 servername localhost username r...
PHP連線mysql的三種方式
php與mysql的連線有三種方式,分別是 php的mysql擴充套件 php的mysqli擴充套件 php資料物件 pdo 下面針對以上三種連線方式做下總結,以備在不同場景下選出最優方案。1 php的mysql擴充套件是設計開發允許php應用與mysql資料庫互動的早期擴充套件。mysql擴充套件...
mysql 連線三種方式 mysql的三種連線方式
sql的三種連線方式分為 左外連線 右外連線 內連線,專業術語分別為 left join right joing inner join 內連線inner join 使用比較運算子來根據指定的連線的每個表都有的列的值來進行匹配連線,如果對應的列值不存在,則連線的所有表對應的該列值都不會進行連線,也就是...