php - mysqli_query 和 bind_param 之间性能差异 10 倍(PHP 7)

标签 php mysql mysqli pdo bindparam

我试图向数据库中插入一些内容,并决定使用两种不同的方式来查看查询性能。

我用过 (end_microtime -starting_microtime) 方式查看正在发生的情况。

绑定(bind)参数代码:

<?php
timer_start = microtime(TRUE);


$db = @new mysqli('localhost','root','','database');
$username = "username";
$email= "test@html.com";
$password = "123456789";

 $query = "INSERT INTO users (username,email,password) VALUES (?,?,?)";
$stmt = $db->prepare($query);

$stmt->bind_param("sss", $username, $email, $password);
$stmt->execute();

$stmt->close();

$timer_end = microtime(TRUE);  
echo($timer_end - $timer_start);  

?>

结果:~ 0.090020895004272

mysqli_query代码(现在改之前有语法错误)

<?php
$timer_start = microtime(TRUE);


$db = @new mysqli('localhost','root','','database');
$username = "username";
$email= "asdf@ghj.com";
$password = "123456789";

$query = "INSERT INTO users (username,email,password) 
                   VALUES  ('$username','$email','$password')";
mysqli_query($db,$query);

$timer_end = microtime(TRUE);  
echo($timer_end - $timer_start);

?>

结果 = ~ 0.00070500373840332

问题是:为什么会发生这种情况?

最佳答案

普通查询和准备好的语句之间的差异始终存在,因为对于后者,您需要两次到数据库,一次准备查询,一次执行。

但是,您不必认为准备好的语句会慢 2 倍,因为查询执行过程涉及的操作远多于服务器的往返操作,其中大部分是这两种方法都很常见,并且需要更多时间(例如将数据存储在硬盘上)。

当然,没有像 10 倍那么大的差异。在您的情况下,这只是因为由于愚蠢的语法错误,第二个查询永远不会被执行

关于 PDO 的结果,这是因为默认情况下 PDO 只是伪造准备好的语句,自行处理绑定(bind)数据,然后发送常规查询。尽管 .0002 和 .0009 之间所谓的任何差异都不应该给您留下太深的印象,因为它们都适合测量误差。

关于php - mysqli_query 和 bind_param 之间性能差异 10 倍(PHP 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39275574/

相关文章:

php - SELECT 语句中的单个单词是否可以进行 SQL 注入(inject)?

php - 如何将ASCII字符串转换为Bangla UTF-8字符串?

php - 转换为 int 还是保留为字符串?

php - 将一个数组缩减为另一个数组

php - 我如何在 CakePHP 3.0 中获得随机行?

MySQL IF...THEN 语法错误

MySQL 多对多关系

php - Laravel 5.3 - 登录尝试重定向失败

php - php 中的 new DateTime() 与 new DateTime ('NOW' )

20,000+条记录的MySQL设计理论