2011-12-27 122 views
3

我读过一本关于PHP & MySQL的书。 准备语句使用二进制协议,但mysqli缺乏此功能。 另外我读了准备好的语句可以被缓存(他们的执行计划)并且比mysqli_query更快,当然更安全? 什么时候应该使用预准备语句,何时使用mysqli_query?准备好的语句和mysqli_query之间有什么区别?

编辑
让我们asume我有以下查询:

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>"; 

哪种方法是这里最好的?

回答

4

准备好的语句具有一些优点,其中一个重要的特点是对SQL注入漏洞更简单。我认为这是他们最大的优势。关于性能,我们必须考虑SQL解析,查询计划创建和结果获取阶段与查询执行成本之间的成本:如果后者的I/O占主导地位(通常是这样),那么您从准备阶段或mysqli中获益甚微。

对于简单的重复查询 - 经常在Web应用程序的简单的一部分使用 - MySQL的查询缓存适用于查询与完全相同的,完整的SQL文本,由此制得的查询不会使用它。根据我的经验,这可能不会否定任何准备好的查询的性能优势。

+0

那么使用它们的组合是否更好? – ALH 2011-12-27 13:59:58

+0

原则上,每一个查询都需要根据此分析进行分析和处理。当然,在开发可维护的应用程序时,这远远不实用。所以基本上我建议分析鸟的应用程序视图,然后决定实现模式。 – 2011-12-27 14:53:47

+0

什么是更加万无一失的意思?这是否意味着即使Prepared语句正确写入,SQL注入仍然是可能的? – krikara 2013-10-28 03:06:09

相关问题