本文通过使用PHP循环插入1000次随机10位数字到mysql数据库来分析在php中使用mysqli和pdo的性能表现情况,来分析在php中使用pdo方式还是使用mysqli的方式更优秀。分析对比逻辑:循环1000次,每次生成一个10位数字,成功插入数据库以后,统计处理时间。每一种方式个执行5次,然后通过5次所消耗的时间来求平均值,最后以平均值大小来判断执行速度,速度快者性能更优秀。

一、测试逻辑代码:

PHP

<?php
// 设置数据库连接参数
if ($_GET != NULL) {
   $id = $_GET['id'];
} else {
   $id = 1;
}
   $db_host = '127.0.0.1';
   $db_user = 'test';
   $db_pass = 'test';
   $db_name = 'test';
// PDO方式
if ($id == 1) {
   try {
       // 创建数据库连接
       $pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
       // 设置 PDO 错误模式,以抛出异常
       $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
       
       // 开始时间
       $start_time = microtime(true);
       for ($i = 0; $i < 1000; $i++) {
           $str = rand(10000000000, 9999999999);
           $sql = "INSERT INTO test (test) VALUES (:test)";
           $stmt = $pdo->prepare($sql);
           $stmt->bindParam(':test', $str);
           $stmt->execute();  // 执行插入操作
       }
       // 结束时间
       $end_time = microtime(true);
       // 使用的时间
       $execution_time = $end_time - $start_time;
       $execution_time = number_format($execution_time, 3); // 只保留三位小数
       echo "PDO方式循环插入1000次随机10位数字,耗时:" . $execution_time . '秒';
   } catch (PDOException $e) {
       // 如果连接过程中发生错误,则捕获异常并输出错误信息
       echo "数据库连接失败: " . $e->getMessage();
   }
} elseif ($id == 2) {
   // mysqli方式
   $conn = new mysqli($db_host, $db_user, $db_pass, $db_name);
   if ($conn->connect_error) {
       die("Connection failed: " . $conn->connect_error);
   }
   $start_time_mysqli = microtime(true);
   for ($i = 0; $i < 1000; $i++) {
       $str = rand(10000000000, 9999999999);
       $sql = "INSERT INTO test (test) VALUES ('$str')";
       $conn->query($sql);
   }
   $end_time_mysqli = microtime(true);
   $execution_time_mysqli = $end_time_mysqli - $start_time_mysqli;
   $execution_time_mysqli = number_format($execution_time_mysqli, 3); // 只保留三位小数
   echo "Mysqli方式循环插入1000次随机10位数字,耗时:" . $execution_time_mysqli . '秒';
   $conn->close();
} else {
   // 其他操作
}
?>

二、运行测试代码

测试环境:

操作系统:CentOS Stream 8 x86_64(Py3.7.9)

PHP版本:PHP8.1

Mysql版本:MySQL 5.7.41

运行以上测试代码,然后记录每次运行时间:

运行次数12345
PDO方式:6.5836.3136.8586.2546.142
Mysqli方式:6.3226.1716.6916.2206.307


PDO方式执行前:


使用PDO方式连续5次运行截图:


PDO方式运行代码结束后清空数据表,使用mysqli方式连续运行5次:


三、计算对比

PDO方式平均时间:6.43秒

Mysqli方式平均时间:6.3422秒

很诧异,在PHP中使用PDO方式处理同样的数据居然比使用Mysqli要稍微慢一点。本次测试Mysqli方式以微弱的优势胜出。不过本次测试只是单纯的数据插入测试,并不全面,测试环境也并不严谨、采样数据也不够丰富。

结论:在php中不管使用PDO方式还是Mysqli方式来处理mysql数据,性能表现不相上下,至少在本次测试插入数据的时间上相差不大。所以,对于我们普通站长来说,使用哪一种方式来处理mysql数据都是没有问题的。相对来说,使用PDO方式在更安全性上会更有优势一点。