使用PDO、MVC和PHP将变量绑定到DB查询时出现问题
当然,在我为乡村学校图书馆准备的MVC中,我有一个PHP表单,它必须初始化搜索过程(findMember.PHP) 不将变量传递给查询,尽管它是send函数。我用die($ime)函数检查了它。 当我写作时使用PDO、MVC和PHP将变量绑定到DB查询时出现问题,php,mysql,model-view-controller,pdo,Php,Mysql,Model View Controller,Pdo,当然,在我为乡村学校图书馆准备的MVC中,我有一个PHP表单,它必须初始化搜索过程(findMember.PHP) 不将变量传递给查询,尽管它是send函数。我用die($ime)函数检查了它。 当我写作时 $this->db->bind(':ime', 'Stefan'); 一切正常 Database.php <?php /* * PDO Databace Class * Connect to database * Create prepared statemen
$this->db->bind(':ime', 'Stefan');
一切正常
Database.php
<?php
/*
* PDO Databace Class
* Connect to database
* Create prepared statements
* Bind values
* Return rows and results
*/
class Database{
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;
private $charset = DB_CHARSET;
private $dbh;
public $stmt;
private $error;
public function __construct()
{
// Set DNS
$dns = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname . ';charset' . $this->charset;
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
// PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
// PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
// PDO::ATTR_EMULATE_PREPARES => false,
);
// Create PDO instance
try {
$this->dbh = new PDO($dns, $this->user, $this->pass, $options);
} catch (PDOException $e) {
$this->error = $e->getMessage();
echo $this->error;
}
}
// Prepare statement with query
public function query($sql){
$this->stmt = $this->dbh->prepare($sql);
}
// Bind values
public function bind($param, $value, $type = null){
if(is_null($type)){
switch(true){
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
$this->stmt->bindValue($param, $value, $type);
}
// Execute the prepared statement
public function execute(){
return $this->stmt->execute();
}
// Get result set as array of objects
public function resultSet(){
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_OBJ);
}
// Get single record as object
public function single(){
$this->execute();
return $this->stmt->fetch(PDO::FETCH_OBJ);
}
// Get row count
public function rowCount(){
return $this->stmt->rowCount();
}
// Poslednji uneti ID
public function lastId(){
return $this->stmt->lastInsertId();
}
}
请向我们展示您正在使用的方法的数据库类。我们不知道那里发生了什么。Tbh,我看不出任何理由将PDO封装在类中,如果它只是模拟PDO的话。它只会造成不必要的复杂性,而没有真正的收益。只需创建一次PDO实例并将其传递给需要它的类即可。
<?php
// Zaduzenje.php
class Zaduzenje {
private $db;
public function __construct(){
$this->db = new Database;
}
// Nadji člana za zaduženje
public function findMemberCard($ime){
// die($ime);
$sql = "SELECT * FROM biblio_clanovi WHERE ime = :ime";
$this->db->query($sql);
// Bind value
$this->db->bind(':ime', $ime);
// $this->db->bind(':razred', $razred);
// $this->db->bind(':odelenje', $odelenje);
$results = $this->db->resultSet();
return $results;
}
}
$this->db->bind(':ime', $ime);
$this->db->bind(':ime', 'Stefan');
<?php
/*
* PDO Databace Class
* Connect to database
* Create prepared statements
* Bind values
* Return rows and results
*/
class Database{
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;
private $charset = DB_CHARSET;
private $dbh;
public $stmt;
private $error;
public function __construct()
{
// Set DNS
$dns = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname . ';charset' . $this->charset;
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
// PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
// PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
// PDO::ATTR_EMULATE_PREPARES => false,
);
// Create PDO instance
try {
$this->dbh = new PDO($dns, $this->user, $this->pass, $options);
} catch (PDOException $e) {
$this->error = $e->getMessage();
echo $this->error;
}
}
// Prepare statement with query
public function query($sql){
$this->stmt = $this->dbh->prepare($sql);
}
// Bind values
public function bind($param, $value, $type = null){
if(is_null($type)){
switch(true){
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
$this->stmt->bindValue($param, $value, $type);
}
// Execute the prepared statement
public function execute(){
return $this->stmt->execute();
}
// Get result set as array of objects
public function resultSet(){
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_OBJ);
}
// Get single record as object
public function single(){
$this->execute();
return $this->stmt->fetch(PDO::FETCH_OBJ);
}
// Get row count
public function rowCount(){
return $this->stmt->rowCount();
}
// Poslednji uneti ID
public function lastId(){
return $this->stmt->lastInsertId();
}
}