一个类中的PDO请求

时间:2015-02-20 19:45:12

标签: php class pdo

这是我的班级:

class ProfileLink {

    function profileLink(PDO $pdo, $string, $i=0)
    {
        if ($i!=0) {
            $link = $string . '-' . $i;
        } else {
            $link = $string;
        }
        $req = $pdo->prepare('SELECT link FROM users WHERE link = ?');
        $req->execute(array($link));
        $nb = $req->rowCount();
        $req->closeCursor();
        if ($nb > 0) {
            $i++;
            return profileLink($pdo, $string, $i);
        } else {
            return $link;
        }
    }

}

当我从班级调用profileLink函数时,它不起作用,但如果我在课外调用它,一切都可以。这可能是PDO的一个问题,你怎么看?

require_once ('lib/profileLink.class.php');
$profileLink = new ProfileLink();
$link = $profileLink->profileLink($pdo, $string);

2 个答案:

答案 0 :(得分:1)

我会将PDO的实例存储为类属性,以便可以在类中轻松访问它。请注意,我的示例使用稍微不同的语法(现代PHP)。

class ProfileLink {

    protected $pdo;

    public function __construct(PDO $pdo) {
        $this->pdo = $pdo;  
    }

    public function profileLink($string, $i=0)
    {
        if ($i!=0) {
            $link = $string . '-' . $i;
        } else {
            $link = $string;
        }
        $req = $this->pdo->prepare('SELECT link FROM users WHERE link = ?');
        $req->execute(array($link));
        $nb = $req->rowCount();
        $req->closeCursor();
        if ($nb > 0) {
            $i++;
            return profileLink($string, $i);
        } else {
            return $link;
        }
    }

}
$profileLink = new ProfileLink($pdo);

答案 1 :(得分:0)

2件事:

这里

 return profileLink($pdo, $string, $i);

你错过了$this,因为它不是常规函数而是类方法:

 return $this->profileLink($pdo, $string, $i);

第二,你的方法与类同名(第一个大写字母除外),因此似乎被解释为构造函数。我刚试过这个:

class Test {
    function test() {
        echo "test";
    }
}
$t = new Test();

并输出"test"

因此,您应该将方法重命名为getLink或类似的东西。