为了防止在PHP中使用PDO使用自定义函数进行SQL注入


To prevent SQL injection using PDO in PHP using custom functions

>我将阻止使用 PDO 进行 SQL 注入,但我想知道我的代码可以防止 SQL 注入吗
这是我的代码

连接.php

<?php
$hostname='localhost';
$username='root';
$password='root';
try {
      $pdo_obj = new PDO("mysql:host=$hostname;dbname=dbname",$username,$password);
      $pdo_obj->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
      $pdo_obj->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    }
 catch(PDOException $e)
    {
      echo $e->getMessage();
    }
    ?>

我的函数.php

    <?php
    function getdata($pdo_obj, $sql, $params=NULL)      // pdo prepaired statements
    {
       $stmt = $pdo_obj->prepare($sql);
        $stmt->execute($params);
        return $stmt; 
    }
?>

和我的页面.php

<?php
$searchTerm = $_GET['term'];
 $result=getdata($pdo_obj,"SELECT b_type FROM b_details WHERE b_type LIKE '%".$searchTerm."%'")->fetchAll();
// my work
?>

一切都工作正常,但我不确定这段代码是否会阻止SQL注入提前致谢

您没有使用函数的功能来防止注入。为此,您必须通过参数发送任何数据。

<?php
$searchTerm = '%'.$_GET['term'].'%';
$sql = "SELECT b_type FROM b_details WHERE b_type LIKE ?";
$result = getdata($pdo_obj, $sql, [$searchTerm])->fetchAll(PDO::FETCH_COLUMN);

顺便说一句,我添加了一个PDO::FETCH_COLUMN常量,这将使返回的数组更方便,只选择了一列。