在SELECT PDO准备语句中进行SELECT

这个问题在这里已经有了答案:

  • PDO准备的语句是否足以防止SQL注入? 7个答案

  • 为了消除任何困惑,我正在做的是这样的:

    $pdo = new PDO('..'); $sql = 'SELECT id FROM users WHERE username = :username'; $statement = $pdo->prepare($sql); $statement->bindParam(':username', $_POST['username']);

    问题是,如果$ _POST ['username']包含'SELECT * FROM users'(或任何其他查询)会怎么样?

    该查询将返回用户名为“SELECT * FROM users”的所有用户的ID。

    通过传递$ _POST ['username']作为参数,数据库知道$ _POST ['username']可能包含的任何字符串不是查询的一部分。 这只是一个字符串。

    这可以防止SQL注入,因为参数不会被执行。 这也意味着

    SELECT name, continent FROM world WHERE continent IN (SELECT continent FROM world WHERE name='Brazil')

    第二个选择充当用户输入参数 - so $ _POST ['name']包含这个查询SELECT continent FROM world WHERE name ='Brazil'

    将无法工作。 因为你不能在参数中包含查询。 你可以,但他们不会被执行。

    链接地址: http://www.djcxy.com/p/93739.html

    上一篇: SELECT within SELECT PDO prepared statement

    下一篇: Is this PDO code safe enough from SQL injection?