Php 在OOP中使用哪个更安全?

Php 在OOP中使用哪个更安全?,php,pdo,Php,Pdo,我在学习PDO和OOP的过程中学习了这两种方法,我想问一下,使用哪种方法更安全?绑定我们使用的所有东西还是仅仅使用?并执行它 1: 或2: 第二个更好,但仍然有一个货物崇拜catch。它不会返回任何东西。应该是 public function query($query, $params = []){ $stmt = $this->datab->prepare($query); $stmt->execute($params); return $stmt;

我在学习PDO和OOP的过程中学习了这两种方法,我想问一下,使用哪种方法更安全?绑定我们使用的所有东西还是仅仅使用?并执行它

1:

或2:


第二个更好,但仍然有一个货物崇拜
catch
。它不会返回任何东西。应该是

public function query($query, $params = []){
    $stmt = $this->datab->prepare($query);
    $stmt->execute($params);
    return $stmt;
}

它可以用于任何查询,不仅可以用于插入,还可以用于选择、更新、删除等。

您可以同时使用这两种方法,但使用bind可以更好地使用all with type而不是使用switch来编写,要使其简短,可以使用2

public function query($query, $params = []){
    global $datab
    $stmt = $datab->prepare($query);
    $stmt->execute($params);
    return $stmt;
}

在第二个示例中,所有参数都被视为
PDO::PARAM_STR
。在这两种情况下,查询都是准备好的,因此在sql注入攻击这一点上没有区别。第一个完全错误。决不应基于值的类型进行绑定。您应该根据当前使用2的列的类型进行绑定。在我未来的项目中,我可能会改变方法使用
global
在这种情况下毫无意义。此函数是一个类方法,在类变量中已经有一个连接句柄
public function query($query, $params = []){
    $stmt = $this->datab->prepare($query);
    $stmt->execute($params);
    return $stmt;
}
public function query($query, $params = []){
    global $datab
    $stmt = $datab->prepare($query);
    $stmt->execute($params);
    return $stmt;
}