我应该在“LIKE”sql 查询中转义通配符吗?


should I escape wildcards in a "LIKE" sql query?

假设我有一个LIKE sql 语句存储在一个变量中,如下所示:

$movie_title = $_POST['movie_title'];
$query= "SELECT movie FROM movies WHERE title LIKE '%" . $movie_title . "%'";

通过转义通配符%_,我可以防止什么 sql 注入攻击实例?

使用 PDO:

$pdo = new PDO(/* db info */);
$original = $_POST['movie_title'];
$wildcarded = '%'.$original.'%';
$stmt = $pdo->prepare('SELECT movie FROM movies WHERE title LIKE :var');
$stmt->bindParam(':var', $wildcarded);
$stmt->execute();
// fetching and stuff...

很简单:

编写如下函数:

function sqlwildcardesc($x){
    return str_replace(array("%", "_"), array("''%", "''_"), mysql_real_escape_string($x));
}

现在您的查询:

$query= "SELECT movie FROM movies WHERE title LIKE '%".sqlwildcardesc($movie_title)."%'";

这应该有效! 我在自己的项目中测试了它!!玩得开心;)