在SELECT PDO准备语句中进行SELECT
这个问题在这里已经有了答案:
为了消除任何困惑,我正在做的是这样的:
$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