精选查询的预备语句

时间:2012-09-10 09:44:37

标签: php mysql prepared-statement

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

如:

`SELECT * FROM `table_name`

有了这个,这样做不是更好:

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

4 个答案:

答案 0 :(得分:1)

如果查询只运行一次(每个脚本),确实没有变量,无论你使用它确实没有多大区别准备好的陈述或一次性查询。

答案 1 :(得分:1)

@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);
  }
}
?>

答案 2 :(得分:0)

据我认为这不是必须的,但是你最好为代码的完整性做这件事。这个简单的选择查询(没有分配)将无法攻击。

答案 3 :(得分:0)

  1. 如果您的table_name是变量而不是硬编码项,那么您就是在保护自己免受SQL注入。
  2. 准备好的陈述将准备(即计划)和执行分开。
  3. 如果您将反复运行相同的查询,那么您正在提高性能,因为您只计划一次查询。
  4. 使用预准备语句而不是像这样的直接查询的性能损失实际上是不存在的,因为你以任何一种方式打开连接,并且执行的额外调用是在同一个连接上。

    如果您打算从表格中仅选择某些字段,则使用*进行选择可能与性能损失一样糟糕。