我正在创建要在我的项目中使用的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 :: bindParam()
如果有人可以帮我一点忙,那我真的很想更好地了解PDo。
最佳答案
您必须捕获prepare调用的结果(这是一个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()
。关于php - 无法使用“execute()”执行我的PDO查询,并得到“bindParam()”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19176162/