【问题标题】:database connection through oops通过 oops 连接数据库
【发布时间】:2021-10-22 08:34:03
【问题描述】:

我正在使用 OOP PHP 和 PDO 开发数据库连接,但遇到此错误:

警告:第 29 行 C:\xampp\htdocs\VICAS\assets\dbfiles\config.php 中的数组到字符串转换 致命错误:未捕获的类型错误:PDO::__construct(): 参数 #4 ($options) 必须是 ?array 类型,字符串在 C:\xampp\htdocs\VICAS\assets\dbfiles\config.php:29 堆栈跟踪: #0 C:\xampp\htdocs\VICAS\assets\dbfiles\config.php(29): PDO->__construct('mysql:host=loca...', 'root', '', 'Array') #1 C:\xampp\htdocs\VICAS\pageincludes\image.php(4): vicass->__construct() #2 {main} 在 C:\xampp\htdocs\VICAS\assets\dbfiles\config.php 中抛出第 29 行

我是 OOP 的新手,因此我们将不胜感激。

<?php

class vicass
{
    var $host;
    var $username;
    var $password;
    var $database;
    var $connect;
    var $home_page;
    var $query;
    var $data;
    var $statement;
    var $filedata;
    var $options;

    function __construct()
    {
        $this->host = 'localhost';
        $this->username = 'root';
        $this->password = '';
        $this->database = 'vicas';
        $this->home_page = 'http://localhost/Vicas/index.php';
        $this->options = array(
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
            PDO::ATTR_EMULATE_PREPARES   => false,
        );

        $this->connect = new PDO("mysql:host=$this->host; dbname=$this->database", "$this->username", "$this->password", "$this->options");

        session_start();
    }

    function execute_query()
    {
        $this->statement = $this->connect->prepare($this->query);
        $this->statement->execute($this->data);
    }

    function total_row()
    {
        $this->execute_query();
        return $this->statement->rowCount();
    }

    function redirect($page)
    {
        header('location:'.$page.'');
        exit;
    }
}
?>

如果我排除选项,那么它可以工作,但我需要添加那些 选项...请指导我。

【问题讨论】:

    标签: php pdo


    【解决方案1】:

    这与“OOP”无关,PHP 给你的警告在这种情况下是完全不言自明的。

    PDO::__construct 期望 $options 参数是一个数组,这里

    $this->connect = new PDO("mysql:host=$this->host; dbname=$this->database", "$this->username", "$this->password", "$this->options");
    

    您将它用双引号括起来,这会将其转换为字符串 - 因此会出现错误(因为 PHP 不会自动知道如何以字符串格式表示数组)。

    删除那些双引号将数组传递给__construct

    注意用户名和密码变量周围的引号是多余的,因为这些变量已经包含字符串(对于这些参数,需要一个字符串)。

    $this->connect = new PDO("mysql:host=$this->host; dbname=$this->database", $this->username, $this->password, $this->options);
    

    【讨论】:

    • 我为您编辑了它,以使解释更清晰并提供工作版本。给我点个赞吧。
    • @SibanandaSahu 不,你没有,是我投了赞成票。这里只有一票,你还没有upvote privileges,所以不可能是你。如果您尝试投票,那么系统将拒绝它并向您显示一条消息来告诉您。你可以做什么来表达你的感激之情,是mark the answer as "accepted"
    猜你喜欢
    • 1970-01-01
    • 2017-06-14
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2011-06-10
    • 2020-10-15
    • 1970-01-01
    相关资源
    最近更新 更多