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

时间:2016-02-25 09:41:49

标签: php pdo

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

connection.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();
    }

    ?>

my function.php

    <?php

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

和我的page.php

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

每件事情都运行正常,但我不确定这段代码会阻止SQL注入 在此先感谢

1 个答案:

答案 0 :(得分:3)

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

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

BTW,我添加了一个PDO::FETCH_COLUMN常量,只要选择了一列,就会使返回的数组更方便。