我的数据库连接有问题。
好吧,我包含db.php文件,在该文件中初始化了PDO连接,然后检查是否设置了$ err变量,如果没有设置,我创建一个新对象,并尝试使用一种为该对象构建链接ID的方法。我。但是问题是-此类中的方法根本看不到$ pdo对象。
index.php
require_once 'db.php';
if (!isset($err)) {
$linkBuilder = new LinkBuilder();
$link = $linkBuilder->buildLink();
// ...
}
LinkBuilder.class.php
<?php
class LinkBuilder {
private $newLink;
private function linkInUse($link) {
try {
$stmt = $pdo->prepare('SELECT * FROM table WHERE link = :link');
$stmt->bindValue(':link', $link);
$stmt->execute();
if ($stmt->rowCount() > 0) return true;
} catch (PDOException $e) {
$err = Constants::DB_ERR;
}
}
public function buildLink() : string {
do {
$this->newLink = rand(100, 999) . chr(rand(65, 90)) . chr(rand(65, 90)) . chr(rand(65, 90));
} while ($this->linkInUse($this->newLink));
return $this->newLink;
}
}
而且,是否有任何更改可以使此代码变得更好?
谢谢andvance!
答案 0 :(得分:0)
您必须将PDO对象传递到您的类中。在现代框架中,这将通过依赖注入来完成。就您而言,您可以从向链接构建器类添加一个构造器开始。
class LinkBuilder {
private $pdo;
private $newLink;
public function __construct(\PDO $pdo)
{
$this->pdo = $pdo;
}
private function linkInUse($link) {
try {
$stmt = $this->pdo->prepare('SELECT * FROM table WHERE link = :link');
…
您必须将Object的初始化更改为
require_once 'db.php';
if (!isset($err)) {
$linkBuilder = new LinkBuilder($pdo);
$link = $linkBuilder->buildLink();
// ...
}