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扩大 | PDO | PHP的mysql扩大 | |
引入的PHP版本 | 5.0 | 5.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) { die("could not connect to the database:\n" . mysql_error());//诊断衔接毛病 } mysql_query("set names 'utf8'");//编码转化 $select_db = mysql_select_db($mysql_conf['db']); if (!$select_db) { die("could not connect to the db:\n" . mysql_error()); } $sql = "select * from user;"; $res = mysql_query($sql); if (!$res) { die("could get the res:\n" . mysql_error()); } while ($row = mysql_fetch_assoc($res)) { print_r($row); } 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) { die("could not connect to the database:\n" . $mysqli->connect_error);//诊断衔接毛病 } $mysqli->query("set names 'utf8';");//编码转化 $select_db = $mysqli->select_db($mysql_conf['db']); if (!$select_db) { die("could not connect to the db:\n" . $mysqli->error); }$sql = "select uid from user where name = 'joshua';"; $res = $mysqli->query($sql); if (!$res) { die("sql error:\n" . $mysqli->error); } while ($row = $res->fetch_assoc()) { var_dump($row); } $res->free(); $mysqli->close(); ?>
3、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::FETCH_ASSOC 关联数组情势 // PDO::FETCH_NUM 数字索引数组情势 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { var_dump($row); } } $pdo = null;//封闭衔接 ?>
更多PHP相干学问,请接见ki4网!
以上就是php衔接数据库的体式格局有哪些?的细致内容,更多请关注ki4网别的相干文章!