无法使用“execute()”执行我的PDO查询,收到“bindParam()”错误


Cant execute my PDO query using "execute()" getting "bindParam()" errors

我正在创建一个用于我的项目的PDO登录类,但由于我是新手,因此无法将参数绑定到准备好的sql语句。这是用来做的函数:

include_once('connection.php');
class User{
    protected $db;
    public function __construct(){
        $oConnection = new Connection;
        $this->db = $oConnection->getConnection();
        //var_dump($this->db);
    }
    public function Login($name, $pass){
        if(!empty($name) && !empty($pass)){         
            $st = $this->db;
            $st->prepare("SELECT * FROM users WHERE user_name=? and user_password=?");
            $st->bindParam(1, $name);
            $st->bindParam(2, $pass);
            $st->execute();
            var_dump($st);
            if($st->rowCount == 1){
                echo "User verified, Acces granted.";
            }else{
                echo "Incorrect username or password.";
            }
        }else{
            echo "Please fill in the entire form";
        }
    }
}

这是连接:

class Connection{
    protected $db;
    //Construct
    public function Connection(){
    $conn = NULL;
        try{
            $conn = new PDO("mysql:host=localhost;dbname=<db_name>", "<db_user>", "<db_pass>");
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } catch(PDOException $e){
                echo 'ERROR: ' . $e->getMessage();
                }
            $this->db = $conn;
    }
    public function getConnection(){
        return $this->db;
    }
}

我收到以下错误:

致命错误:在 ......在第 22 行

如果有人能帮我一点,那就太好了,我真的很想更好地了解PDo。

您必须捕获准备调用的结果(这是一个PDOStatement对象),然后调用bindParam(),而不是PDO对象本身。

$st = $this->db->prepare("SELECT * FROM users WHERE user_name=? and user_password=?");
$st->bindParam(1, $name);
$st->bindParam(2, $pass);
$st->execute();

$st现在是 PDOStatement 对象,您可以调用 bindParam()execute()

如果您已将MySQL错误复制到Google,则会在许多页面中看到相同的错误。这是第一个说:

bindParam() 方法位于 PDOStatement 类内,而不是 PDO 类中。该语句是 prepare() 方法的结果。

请参阅: 调用未定义的方法 PDO::bindParam()

您正在使用 PDO 对象作为要绑定的语句准备对象

$db = $this->db;
$st = $db->prepare("SELECT * FROM users WHERE user_name=? and user_password=?");
$st->bindParam(1, $name);
$st->bindParam(2, $pass);
$st->execute();