比较MySQL 和MySQLi的区别
在使用PHP编写Web应用程序时,MySQL是最受欢迎的数据库之一。然而,有些开发人员可能对使用哪种MySQL API(应用程序编程接口)来连接数据库感到困惑。本文将比较MySQL 和MySQLi,它们各有优缺点,以帮助您选择最适合您的应用程序的选项。
阅读更多:MySQL 教程
MySQL API
MySQL API是PHP中连接MySQL数据库的原始方法。以下是使用MySQL API连接数据库(在本例中使用root用户名和密码)的示例代码:
$conn = mysql_connect("localhost", "root", "password");
mysql_select_db("myDatabase", $conn);
mysql_connect
函数与数据库建立连接,而 mysql_select_db
函数选择您希望使用的数据库。一旦建立连接并选择了数据库,您可以使用其他 mysql_
函数从中检索或写入数据。
MySQLi API
MySQLi是一种新的(在PHP 5之后添加)MySQL API,具有比MySQL API更丰富的功能。以下是使用MySQLi API连接数据库的示例代码:
$conn = mysqli_connect("localhost", "root", "password", "myDatabase");
与MySQL API不同,MySQLi API在连接串中指定了要使用的数据库。该库提供了多个选项来处理大量连接,允许使用预备语句(prepared statements)等功能。
以下是MySQLi API的另一些功能:
- 支持多个语句同时执行
- 支持事务
- 支持存储过程
- 对面向对象编程的支持更友好
性能
MySQLi API是比MySQL API更快的API。这部分归功于MySQLi API在连接池管理方面的优化,以及通过绑定变量实现的预备语句的使用。
我们在下面提供了一个简单的基准测试,其中13,000个查询被执行了两次,一次使用MySQL API,另一次使用MySQLi API。
API | Time (seconds) |
---|---|
MySQL | 10.658 |
MySQLi | 1.130 |
从上表可以看出,MySQLi API比MySQL API快了9倍。
安全
MySQLi API具有比MySQL API更好的安全性。在MySQLi API中,可以使用预备语句和绑定参数的方式来防止SQL注入攻击。SQL注入攻击可以通过在“查询”中注入恶意代码,使它执行不受欢迎的操作或泄漏敏感数据。以下是使用MySQLi API的更安全的代码示例:
$stmt = $conn->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
概括
在使用PHP时,MySQLi API是更好的API选择。与MySQL API相比,它具有更好的性能和安全性,并且提供的功能更加丰富。 MySQL API仍然可以用于旧版本的PHP(例如,PHP 4),但是MySQLi API应该是对以后进行开发的SQL连接API的首选。