【问题标题】:What is the differences between prepared statements and mysqli_query?准备好的语句和 mysqli_query 有什么区别?
【发布时间】:2011-12-27 13:35:19
【问题描述】:

我读过一本关于 PHP 和 MySQL 的书。 准备好的语句使用二进制协议,但 mysqli 缺少此功能。 我还读到准备好的语句可以被缓存(它们的执行计划)并且比 mysqli_query 更快,当然更安全? 我们什么时候应该使用准备好的语句以及什么时候使用 mysqli_query?

编辑
假设我有以下查询:

echo "<table>";  
echo "<tr class ='tablehead'><td>Name</td><td>Location</td><td>Review</td><td>Image</td>  <td>Thumb</td></tr>";  
while ($row = mysql_fetch_array($query))  
{     
   echo "<tr>";  
   echo "<td>" . $row['user_fname'] . "</td>";  
   echo "<td>" . $row['user_location'] . "</td>";  
   echo "<td>" . $row['user_review'] . "</td>";  
   echo "<td>" . $row['user_image'] . "</td>";  
   echo "<td>" . $row['user_thumb'] . "</td>";  
   echo "</tr>";  
}  
echo "</table>";  

这里哪种方法最好?

【问题讨论】:

    标签: php mysqli


    【解决方案1】:

    Prepared statements 有一些优点,其中一个重要的优点是对 SQL 注入错误更加万无一失。我认为这是他们最大的优势。

    关于性能,必须考虑 SQL 解析、查询计划创建和结果获取阶段的成本与查询执行的成本:如果后者的 I/O 占主导地位(通常如此),您将获得准备好的状态或mysqli很少。

    对于简单的重复查询——通常用于 webapp 的简单部分——MySQL 查询缓存适用于具有完全相同且完整的 SQL 文本的查询,因此准备好的查询不会使用它.根据我的经验,这不仅会抵消预准备查询的任何性能优势。

    【讨论】:

    • 那么结合使用它们会更好吗?
    • 原则上,每一个查询都需要根据这个分析进行分析和处理。当然,在开发可维护的应用程序时,这远非实际。因此,基本上我建议您对您的应用进行鸟瞰分析,然后确定实施模式。
    • 更加万无一失究竟是什么意思?这是否意味着即使使用正确编写的 Prepared 语句仍然可以进行 SQL 注入?
    • SQL 注入对于任何类型的 MySQL 访问都是轻而易举的事,如果如您所说,它们编写正确。对于准备好的查询,更容易做到这一点。
    • 您能详细说明您说的是哪个“MySQL 查询缓存”吗?你说的是运行mysql的db服务器中的缓存还是运行php的web服务器中的缓存?
    猜你喜欢
    • 2023-03-19
    • 2011-07-09
    • 2013-11-19
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    相关资源
    最近更新 更多