php vs MySQLi,哪个更快

时间:2018-08-10 17:19:54

标签: php sql mysqli

我想执行查询以从数据库中的1000行中获取数据。我发现有两种方法可以做到这一点。

方法1:

SELECT * FROM user WHERE id=879

第二个我用来保护自己免受SQL注入的攻击是:

方法2:

<?php
$q="SELECT * FROM user";
$get_res=$dbconn->query($q);
while($set=$get_res->fetch_assoc()) {
 if($set['id']==879)
   {
      //Some task here
   }
}

那么哪一个更快。我知道有关SQL准备的Statement的信息。但是我只想比较这两种方法。并且,如果Method2中存在任何安全漏洞,那么请也解释一下。

4 个答案:

答案 0 :(得分:3)

如果这只是静态的id=879,则只需执行查询即可。它快速,高效,并允许MySQL为您进行过滤。

方法1:

SELECT * FROM user WHERE id=879

性能最高,如果879不是变量,则由您选择。只需执行查询,返回1个结果即可。

方法2:

$pdo = new PDO($dsn, $user, $pass, $opt);
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?');
$stmt->execute([ $_POST['user_id'] ]);
$user = $stmt->fetch();

此方法使用PDO(或者,您可以使用MySQLi软件包中提供的bind_param)。从数据库返回1个结果,并将变量安全地绑定到查询字符串以执行。这可能是您最好的解决方案,因为它可以让MySQL进行过滤(使用索引和最有效的方法来找到结果)。

方法3(请勿使用):

<?php
$q="SELECT * FROM user";
$get_res=$dbconn->query($q);
while($set=$get_res->fetch_assoc()) {
 if($set['id']==879)
   {
      //Some task here
   }
}

太可怕了!您从数据库返回每个结果,并导致许多不必要的循环来获取所需的数据。让数据库进行过滤,这就是它的设计目的!

答案 1 :(得分:0)

第一个(SQL)方法更快。

原因:SQL设计用于非常快速地过滤行(使用ID)。因此,它首先搜索所有索引并返回单个匹配结果。

尽管如此,但从逻辑上讲,这与PHP相同,但是PHP必须首先获取完整的行,验证ID,如果不匹配,则继续进行下一行。

答案 2 :(得分:0)

都是SQL查询,只是在第二个查询中,您使用php进行查询,而不是像第一个查询那样直接进行查询。

如果这是您要构建的网页,则需要使用php或jsp来完成,因为在这种情况下您不能直接这样做。

但是,如果您要问哪个更快,那无疑是第一个。但是,它的使用仅限于SQL平台,而不是在php中全局使用。

答案 3 :(得分:-1)

我认为在第一种方法中您仍在使用PHP执行查询。

如果要接受用户输入,则第二种方法绝不能保护您免受SQL注入的侵害。为此,您需要参数化查询。

此外,方法1绝对是可行的方法-在没有PHP的情况下,越接近所需的结果就越好。