为选择查询准备的语句


Prepared statement for select query

我想知道是否应该使用准备好的语句进行简单的选择查询?

例如:

`SELECT * FROM `table_name`

有了这个,做不是更好吗

$db->query('SELECT * FROM `table_name`');

如果查询只运行一次(每个脚本)并且中确实没有变量,那么无论使用准备好的语句还是一次性查询,都没有太大区别。

@deceze是对的。但如果你想使用准备好的语句,可以使用这样的东西,

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name'])))       // <== passed array of parameters
{
  while ($row = $stmt->fetch()) 
  {
    print_r($row);
  }
}
?>

就我而言,这不是必须的,但为了代码的完整性,您最好这样做。这个简单的选择查询(没有赋值)将无法攻击。

  1. 如果您的table_name是一个变量,而不是硬编码项,那么您就是在保护自己不受SQL注入的影响
  2. 准备好的声明将准备(即计划)和执行分开
  3. 如果您将一次又一次地运行同一个查询,那么您正在提高性能,因为您只计划了一次查询

对于这样的事情,在直接查询上使用准备好的语句几乎不存在性能损失,因为您以任何一种方式打开连接,并且执行的额外调用都在同一连接上。

如果您计划只从表中选择某些字段,则使用*进行选择可能会对性能造成严重影响。

相关文章: