使用PDO而不绑定

5 php mysql pdo sanitization

$stmt = $conn->prepare('SELECT * FROM users WHERE user_id = :user_id');

$stmt->execute(array(':user_id' => $_GET['user_id']));

$result = $stmt->fetchAll(PDO::FETCH_OBJ);
Run Code Online (Sandbox Code Playgroud)

我正在使用这样的PDO,我是否需要清理GET参数?

我知道如果我做的$stmt->bindParam(':user_id', $_GET['user_id'], PDO::PARAM_INT);比这不是问题.但我的方式安全吗?

dec*_*eze 9

是的,这很安全.execute和之间的唯一区别bind*是:

  • execute一次接受几个参数,而你必须bind*单独接受每个参数
  • bind*允许您指定参数类型,同时execute将所有内容绑定为字符串

传递参数execute主要是方便的简写,它仍然是安全的.