Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PDO、MVC和PHP将变量绑定到DB查询时出现问题_Php_Mysql_Model View Controller_Pdo - Fatal编程技术网

使用PDO、MVC和PHP将变量绑定到DB查询时出现问题

使用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

当然,在我为乡村学校图书馆准备的MVC中,我有一个PHP表单,它必须初始化搜索过程(findMember.PHP)

不将变量传递给查询,尽管它是send函数。我用die($ime)函数检查了它。 当我写作时

$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();
}
}