当前位置: 首页 > 面试题库 >

PHP PDO-MYSQL:如何在不同类之间使用数据库连接

上官高畅
2023-03-14
问题内容

我对使用MYSQL的PDO有点陌生,这是我的两个文件:

我有一个用于连接数据库的连接类:

class connection{

private $host = 'localhost';
private $dbname = 'devac';
private $username = 'root';
private $password ='';

public $con = '';

function __construct(){

    $this->connect();

}

function connect(){

    try{

        $this->con = new PDO("mysql:host=$this->host;dbname=$this->dbname",$this->username, $this->password);
        $this->con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);


    }catch(PDOException $e){

        echo 'We\'re sorry but there was an error while trying to connect to the database';
        file_put_contents('connection.errors.txt', $e->getMessage().PHP_EOL,FILE_APPEND);

    }
}   
}

我有一个account_info类,用于查询数据库中的数据:

class account_info{


function getAccountInfo(){

    $acc_info = $this->con->prepare("SELECT * FROM account_info");
    $acc_info->execute();

    $results = $acc_info->fetchAll(PDO::FETCH_OBJ);

    foreach ($results as $key) {
        $results->owner_firstname;

    }
}


}

我在index.php页面中都包含了这两个文件

include_once 'classes/connection.class.php';
include_once 'classes/accountinfo.class.php';

$con = new connection();
$info = new account_info();
$info->getAccountInfo();

我只是无法使其正常工作,我没有任何输出,我认为它与示波器有关,但是由于我是PDO和OOP的新手,所以我不知道为什么要修复它的正确方法。提前致谢。


问题答案:

解决方案1

替换class account_info {class account_info extends connection {

更换

$con = new connection();
$info = new account_info();

$info = new account_info();

它应该工作。

解决方案2(建议)

我强烈建议您在这种情况下使用依赖项注入来解决您的问题。只需将您的帐户类别替换为:

class account_info {

    private $con;

    public function __construct(connection $con) {
        $this->con = $con->con;
    }

    public function getAccountInfo(){

        $acc_info = $this->con->prepare("SELECT * FROM account_info");
        $acc_info->execute();

        $results = $acc_info->fetchAll(PDO::FETCH_OBJ);

        foreach ($results as $key) {
            $results->owner_firstname;
        }
    }

}

并像这样在index.php中使用它:

include_once 'classes/connection.class.php';
include_once 'classes/accountinfo.class.php';

$con = new connection();
$info = new account_info($con);
$info->getAccountInfo();

说明

通常的规则是:始终为函数(公共,保护或私有)指定作用域关键字。

第一个解决方案称为继承,而我们所做的基本上是用连接类扩展account类,以便从连接类继承所有方法和属性并轻松使用它们。在这种情况下,您必须提防命名冲突。我建议您看一下PHP手册中的类继承。

第二种解决方案称为依赖注入,这是一种强烈鼓励的设计模式,它使您的类在其构造函数中接受其他类,以便显式定义类依赖关系树(在这种情况下,帐户依赖于连接,没有连接我们就无法使帐户正常运行)。

在成千上万的可能解决方案中,另一个是某人在下面发布的解决方案,该设计模式称为Singleton。但是,该模式最近已重新评估为反模式,因此不应使用。



 类似资料:
  • 我正在尝试使用基于Kafka Connect的Confluent在几个MySQL数据库之间同步数据。我在源连接器配置中使用了“批量”作为模式,因为主键类型是 varchar,所以我无法使用递增模式。它工作正常,但我遇到了两个问题: 似乎它无法同步删除,当源数据库中的数据被删除时,接收器数据库没有任何变化。数据仍存在于接收器数据库中。 同步数据需要相当长的时间。就我而言,同步具有 2~4k 行的表大

  • 问题内容: 我们正在多家商店中运行带有MySql后端的Java PoS(销售点)应用程序。我想保持商店中的数据库与主机服务器上的数据库同步。 商店中发生某些更改时,应在主机服务器上对其进行更新。我该如何实现? 问题答案: 复制不是很难创建。 这里有一些很好的教程: http://aciddrop.com/2008/01/10/step-by-step-how-to-setup-mysql-data

  • 问题内容: 我想知道在InnoDB中是否可以有一个带有 外键的 引用另一个表的表? 如果是这样,该怎么办? 问题答案: 我在http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key- constraints.html 上没有看到任何限制。 因此,只需使用 otherdb.othertable ,您会很好。

  • 问题内容: 我正在尝试从我的网站连接数据库,并使用C ++显示一些行。因此,基本上我正在尝试制作一个从站点数据库中的表中进行选择查询的应用程序。现在,这必须可行,因为我已经看到大量的应用程序正在这样做。 我该怎么做呢?有人可以举一个例子,告诉我应该使用哪些库吗? 问题答案: 在这里找到:

  • 问题内容: 在中,我有两个不同的数据库-我们称它们为和。 数据库驻留在服务器上,而数据库驻留在服务器上。 两台服务器{ ,}在 物理上彼此靠近 ,但是在不同的计算机上,并且具有不同的连接参数(不同的用户名,不同的密码等)。 在这种情况下,是否可以在数据库中的表与数据库中的表之间执行联接? 如果是这样,我将如何以编程方式在中进行处理?(我使用的单独交互与所述数据库中的每一个)。 问题答案: 尝试使用

  • 问题内容: 如何使用java连接到mysql数据库? 问题答案: 逐步说明如何安装MySQL和JDBC以及如何使用它: 1.下载并安装MySQL服务器。只需按照通常的方式进行即可。每次更改时都请记住端口号。默认情况下3306。 2.下载 JDBC驱动程序并放入classpath,解压缩ZIP文件并将包含的JAR文件放入classpath。特定于供应商的JDBC驱动程序是 JDBC API的具体实现