哪种更好,更安全的PDO语句编写方法?

时间:2017-03-11 10:28:21

标签: php mysql pdo

好的,我在这里很困惑。我见过这样的多个查询。

查询1

$stmt = "SELECT * FROM tablename WHERE user = :user";
$stmt = $pdo->prepare($stmt);
$stmt-> bindValue(':user', $user);
$stmt-> execute();

查询2

$stmt = $pdo->prepare("SELECT * FROM tablename WHERE user = :user");
$stmt-> execute(['user' => $user]);

所以,我想知道上面哪些查询在编码时最有效和首选?或者还有其他比这些更好的方法来编写PDO代码吗?

1 个答案:

答案 0 :(得分:0)

bindParam / bindValue不会使您的查询安全,而:user则称为参数或占位符。只要您将查询中的所有变量替换为参数,您的查询就是100%安全的。

所以你可以说第二个选项和第一个选项一样安全,但更简洁。就个人而言,我更喜欢使用位置占位符来制作更简洁的代码:

$stmt = $pdo->prepare("SELECT * FROM tablename WHERE user = ?");
$stmt-> execute([$user]);

但所有那些变种都同样安全,只是品味问题。