Php 在MySQL中使用预处理语句是否可以防止SQL注入攻击?

Php 在MySQL中使用预处理语句是否可以防止SQL注入攻击?,php,mysql,pdo,sql-injection,Php,Mysql,Pdo,Sql Injection,我只想验证在MySQL中使用预处理语句是否会阻止SQL注入 以下代码是否可以防止所有SQL注入攻击 $var = $_GET['q']; $trimmed = trim($var); if ($trimmed != NULL) { $get_fighters = $DBH->prepare( 'SELECT * FROM fighters WHERE name LIKE :searchTerm OR nickname LIKE :search

我只想验证在MySQL中使用预处理语句是否会阻止SQL注入

以下代码是否可以防止所有SQL注入攻击

$var = $_GET['q']; 
$trimmed = trim($var);
if ($trimmed != NULL) {
  $get_fighters = $DBH->prepare(
    'SELECT * 
    FROM fighters 
    WHERE name LIKE :searchTerm 
      OR nickname LIKE :searchTerm 
      OR born_in_city LIKE :searchTerm
      OR born_in_state LIKE :searchTerm
      OR born_in_country LIKE :searchTerm
      ORDER BY name ASC');
  $get_fighters->bindValue(':searchTerm', '%' . $trimmed . '%', PDO::PARAM_STR);
  $get_fighters->setFetchMode(PDO::FETCH_ASSOC);
  $get_fighters->execute();
  $check_results_fighters = $get_fighters->rowCount();

  $get_events = $DBH->prepare(
    'SELECT * 
    FROM events 
    WHERE event_name LIKE :searchTerm
      OR event_arena LIKE :searchTerm
      OR event_city LIKE :searchTerm
      OR event_state LIKE :searchTerm
      OR event_country LIKE :searchTerm
      OR organization LIKE :searchTerm
    ORDER BY event_date DESC');

  $get_events->bindValue(':searchTerm', '%' . $trimmed . '%', PDO::PARAM_STR);
  $get_events->setFetchMode(PDO::FETCH_ASSOC);
  $get_events->execute();
  $check_results_events = $get_events->rowCount(); 
}

是的,根据php文档,使用准备好的语句将阻止SQL注入


请参见

准备好的查询通过分离要运行的查询和用于该查询的数据来防止攻击。这意味着不会发生一阶攻击,因为您没有将数据直接连接到查询中

简而言之,如果您总是使用准备好的查询,并且所有数据都是通过绑定参数发送的(包括来自其他查询的数据!),那么就SQL注入而言,您就没事了


(我还应该注意,对于不支持准备好的查询的服务器,一些PDO驱动程序将使用传统的转义例程进行伪装。不要担心这一点。这是安全的。)

文档中可能重复的:“在准备好的语句中,不能两次使用同名的命名参数标记。”(尽管在某些版本的PHP中使用PDO/MySQL驱动程序模拟的预处理语句确实支持重复的名称,但依赖它并不安全;另请参见。)总是RTM.eeek..这是否意味着我必须对每个参数执行searchTerm1、2、3、4等,尽管它们都是相同的值?除了要求澄清外,注释不应用于询问其他问题。一方面,一个问题不需要阅读注释就可以理解。另一方面,Q也是如此&网站,而不是论坛,评论不适合(也不适合)讨论。如果您有问题中尚未描述的其他要求,请编辑问题,而不是发表评论。如果您有超出最初提问范围的问题(如此处),请首先检查是否已问过该问题(它有),并且只有在没有的情况下才发布新问题。