好的,我在这里很困惑。我见过这样的多个查询。
查询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代码吗?
答案 0 :(得分:0)
bindParam
/ bindValue
不会使您的查询安全,而:user
则称为参数或占位符。只要您将查询中的所有变量替换为参数,您的查询就是100%安全的。
所以你可以说第二个选项和第一个选项一样安全,但更简洁。就个人而言,我更喜欢使用位置占位符来制作更简洁的代码:
$stmt = $pdo->prepare("SELECT * FROM tablename WHERE user = ?");
$stmt-> execute([$user]);
但所有那些变种都同样安全,只是品味问题。