php - 从 PHP 类中的数据库中获取数据

标签 php mysql class oop pdo

如何在类中从我的数据库获取数据?

我的数据库中有一个users 表,我想以面向对象的方式访问该数据。这意味着我不想一直在我的代码中编写查询,而是想通过 $Users->getUserById(2)->getName();

但问题是我无法在这些类中建立数据库连接。

$pdo = new PDO("mysql:host=ipofdatabase;dbname=nameofdatabase", "username", "password", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));

class Users {
    public function usersList() {
        $db_users = $pdo->query("SELECT id, username, mail FROM users");
        $users = array();

        foreach ($db_users as $u) {
            $users[] = array(
                'id' => $u['id'],
                'username' => $u['username'],
                'mail' => $u['mail']
            );
        }
    }

    public function getUserById($id) {
        return new User($id);
    }
}

我希望 $Users->usersList() 输出一个包含所有数据的数组,但我却收到一个错误,指出第 3 行中的变量 $pdo 未定义。

Notice: Undefined variable: pdo in C:\apache\docs\Users.php on line 6

我应该在每个类中建立数据库连接吗?这不会影响性能吗?

最佳答案

您需要创建一个__construct 函数来访问PDO。您在类的外部 声明$pdo 变量。该类可以访问它内部的内容。

class Foo
{
    protected $pdo; # here we define PDO as part of the class scope.

    public function __construct()
    {
        # we then assign $pdo to be a PDO instance
        $this->pdo = new \PDO('mysql:hostname=localhost;dbname=foobar', 'user', 'pass');
    }

    public function doSomething()
    {
        # we then use the $pdo var using $this->pdo
        $this->pdo->prepare('SELECT * FROM `table`');
        # etc.
    }
}

关于php - 从 PHP 类中的数据库中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53944934/

相关文章:

php - 哪些 PHP 身份验证库未附加到框架并满足这些要求?

php - 如何知道选择了哪个 mysqli_fetch_assoc 行

php - 使用外部 API 访问时,Python Bottle API 无 Json 响应

php - 在 php 生成的查询中出现 mySQL 错误

如果表没有特定条目,MySQL 返回 0

java - secret 是否可以隐藏在提供访问凭据的 'safe' java 类中?

python - 替代 Python 中的二维数组

javascript - jquery/ajax 表单提交不起作用

php - 合并对象数组中除一个值之外的重复项... php/mysql

python - 用户创建的类