php - fatal error : Uncaught Error ( php mysql )

标签 php mysql pdo

我正在使用 mysql 学习 php oop,但我在修复这段代码时遇到了问题。 我查了两遍,也查了这个平台确认。

    <?php 

require 'databasesclass.php';

$database = new Database();

$database->query('SELECT * FROM users');
$rows = $database->resultset();

print_r($rows);

我的数据基类是

    <?php 


class Database{
    private $host = 'localhost:8889';
    private $user = 'root';
    private $pass = 'root';
    private $dbname = 'register';

    private $dbh;
    private $error;
    private $stmt;

    public function __construct(){
        // Set the DSN
        $dsn = 'mysql:host='. $this->host . ';dbname=' . $this->dbname . $this->user . $this->pass;
        // set options
        $options = array(

                PDO::ATTR_PERSISTENT => true,
                PDO::ATTR_ERRMODE    => PDO::ERRMODE_EXCEPTION );

        try {
            $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
        } catch (PDOException $e) {
            $this->error = $e->getMessage();
        }
    }
            public function query($query){

                $this->stmt = $this->dbh->prepare($query);

            }


            public function bind($pram, $value, $type = null){

                if (is_null($type)){
                    switch(true) {
                        case is_int($value):
                            $type = PDO::PRAM_INT;
                            break;
                        case is_bool($value):
                            $type = PDO::PRAM_BOOL;
                            break;  
                        case is_null($value):
                            $type = PDO::PRAM_NULL;
                            break;
                            default:
                            $type = PDO::PRAM_STR;  
                    }

                }

                $this->stmt->bindValue($parm, $value, $type);
            }

            public function execute(){
                 return $this->stmt->execute();
            }

            public function resultset(){
                $this->execute();
                return $this->stmt->fetchALL(PDO::FETCH_ASSOC);
            }

} 

Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\MAMP\htdocs\Practice\databasesclass.php:31 Stack trace: #0 C:\MAMP\htdocs\Practice\index.php(7): Database->query('SELECT * FROM u...') #1 {main} thrown in C:\MAMP\htdocs\Practice\databasesclass.php on line 31

第 31 行是:

$this->stmt = $this->dbh->prepare($query);

最佳答案

无需将 $this->user$this->pass 传递到您的 $dns 变量中。从那里删除它们。

所以 $dns 变量将是

来自

$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname . $this->user . $this->pass;

$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;

如果您发现任何错误,请检查并告诉我。

关于php - fatal error : Uncaught Error ( php mysql ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42132215/

相关文章:

php - Magento:根据商店进行程序化搜索

mysql - 行未按 group by 正确排序

mysql - 在MySQL中,如何建立索引来加速这个查询?

java - 如何使 jdbc mysql 数据库连接生效

javascript - 多表单场景下如何保存之前输入的内容?

php - 雅虎金融 API 未找到表 yahoo.finance.quotes 的定义

php - 对非对象调用成员函数prepare()

php - 无法选择 ip=inet_pton($ip)

php mysql 计数列

php - 如何显示受 http 身份验证保护的图像