这篇文章主要介绍了php中数据库连接方式pdo和mysqli从各个方面进行了对比分析,十分全面,这里推荐给大家,有需要的小伙伴来参考下。
1)总的比较PDO MySQLi数据库支持12种不同的数据库支持支持MySQL API OOP OOP + 过程Connection Easy Easy命名参数支持不支持对象映射支持支持支持预处理语句(客户端)支持不支持性能快快支持存储过程支持支持2 连接方式先来看下两者连接数据库的方式:PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载复制代码代码如下:// PDO$pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password');// mysqli, 面向过程方式$mysqli = mysqli_connect('localhost','username','password','database');// mysqli, 面向对象$mysqli = new mysqli('localhost','username','password','database');3 数据库支持PDO支持多种数据库,但MYSQLI只支持MYSQL 4 命名参数name parameter
PDO的方式:
立即学习“PHP免费学习笔记(深入)
”;
复制代码代码如下:$params = array(':username' => 'test', ':email' => $mail, ':last_login' => time() - 3600);$pdo->prepare('SELECT * FROM users WHERE username = :username AND email = :email AND last_login > :last_login');而MYSQLI则麻烦点,不支持这样,只能:复制代码代码如下:$query = $mysqli->prepare('SELECT * FROM users WHERE username = ?AND email = ?AND last_login > ?');$query->bind_param('sss', 'test', $mail, time() - 3600);$query->execute();这样的话,一个个对问号的顺序,也比较麻烦,不大方便。
5 ORM映射的支持
比如有个类user,如下:
复制代码代码如下:class User{public $id;public $first_name;public $last_name;public function info(){return '#' . $this->id . ': ' . $this->first_name . ' ' . $this->last_name;}}$query = "SELECT id, first_name, last_name FROM users";// PDO$result = $pdo->query($query);$result->setFetchMode(PDO::FETCH_CLASS, 'User');while ($user = $result->fetch()){echo $user->info() . "\n";}MYSQLI用面向过程的方式:复制代码代码如下:if ($result = mysqli_query($mysqli, $query)) {while ($user = mysqli_fetch_object($result, 'User')) {echo $user->info()."\n";}}MYSQLI采用面向过程的方式:复制代码代码如下:// MySQLi, object oriented way if ($result = $mysqli->query($query)) {while ($user = $result->fetch_object('User')) {echo $user->info()."\n";}}6 防止SQL注入方面:PDO 手工设置复制代码代码如下:$username = PDO::quote($_GET['username']);$pdo->query("SELECT * FROM users WHERE username = $username");使用mysqli复制代码代码如下:$username = mysqli_real_escape_string($_GET['username']);$mysqli->query("SELECT * FROM users WHERE username = '$username'");7 preparestament
PDO方式:
复制代码代码如下:$pdo->prepare('SELECT * FROM users WHERE username = :username');$pdo->execute(array(':username' => $_GET['username']));MYSQLI:复制代码代码如下:$query = $mysqli->prepare('SELECT * FROM users WHERE username = ?');$query->bind_param('s', $_GET['username']);$query->execute();小伙伴们是否通过本文对于PHP的2种链接方式PDO和mysqli有了新的认识了呢,,希望本文能对大家有所帮助。
