Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为select查询准备的语句_Php_Mysql_Prepared Statement - Fatal编程技术网

Php 为select查询准备的语句

Php 为select查询准备的语句,php,mysql,prepared-statement,Php,Mysql,Prepared Statement,我想知道我是否应该使用准备好的语句进行简单的select查询 例如: `SELECT * FROM `table_name` 有了这一点,做以下事情不是更好吗 $db->query('SELECT * FROM `table_name`'); 如果查询只运行一次(每个脚本),并且其中确实没有变量,那么无论是使用准备好的语句还是一次性查询,都没有多大区别。我认为这不是必须的,但为了代码的完整性,最好这样做。这个简单的select查询(没有赋值)将无法攻击。@deceze是正确的。但是如果

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

例如:

`SELECT * FROM `table_name`
有了这一点,做以下事情不是更好吗

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

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

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

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

  • 如果您的表名是一个变量而不是硬编码项,那么您就是在保护自己不受SQL注入的影响
  • 准备好的报表将准备(即计划)和执行分开
  • 如果您将一次又一次地运行同一查询,那么您就是在提高性能,因为您只计划了一次查询
  • 在直接查询上使用prepared语句来执行类似的操作实际上不存在性能损失,因为您以任何一种方式打开连接,并且执行的额外调用都是在同一个连接上进行的


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

    是的,这会更好,事实上,如果您没有任何变量,则应该这样做。