2

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

如:

`SELECT * FROM `table_name`

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

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

4 回答 4

1

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

于 2012-09-10T09:47:02.237 回答
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);
  }
}
?>
于 2012-09-10T09:50:09.970 回答
0

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

于 2012-09-10T09:48:52.870 回答
0
  1. 如果您的 table_name 是一个变量而不是硬编码项,那么您就是在保护自己免受 SQL 注入。
  2. 准备好的语句将准备(即计划)和执行分开。
  3. 如果您将一遍又一遍地运行相同的查询,那么您正在提高性能,因为您只计划查询一次。

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

如果您打算仅从表中选择某些字段,则使用 * 进行选择可能会影响性能。

于 2012-09-10T09:53:38.000 回答