PDO没有关闭数据库

时间:2015-03-25 16:09:22

标签: php mysql pdo

我在PDO数据库连接保持连接方面遇到了一些小问题。

我正在运行的代码正在向Twitter发布一些自动发布的帖子。 我每小时通过CRON运行一次代码,但为了一次性保存将所有消息发布到twitter,我在每次循环后用户sleep()。

这(sleep())导致数据库连接保持打开状态,直到脚本运行完毕。 为了试图阻止这一点,我已经在variouse方法中添加了“强制关闭”连接,但它们似乎都没有工作。 返回结果后不需要连接。

以下是我正在使用的代码(此帖子简化了一点)

$escort_obj = new MLE_Escort();
if($result = $escort_obj->getRandomEscortsSearch($limit = 5)){

    foreach ($result AS $row) {

        // set the data we need //

        // assign image
        $image = '..'.$row->PhotoURL;

        // build tags
        $tags = '#Escorts ';
        if(!empty($row->InCallLocation)) {
            $tags .=  '#'.str_replace(' ', '', $row->InCallLocation).' ';
        }

        // join the data into the $tweet
        $tweet =  strip_tags($row->Description).' '.$tags;

        // call function to post to twitter
        postToTwitter($image, $tweet, $tmhOAuth);

        sleep(500); // sleep a while
    }
}

带查询的类文件(提取)

    /*
     * get random profiles for posting to twitter
     * @return result of the mySQL query
     */
    public function getRandomEscortsSearch($limit)
    {
        try
        {

            $query = "SELECT 
                        e.EscortID,
                        e.EscortName,
                        e.DateModified,         
                        LEFT(e.InCallLocation, 25) AS InCallLocation,
                        e.InCallLocation AS FULLInCallLocation,
                        e.HairColour,
                        LEFT(e.EscortProfile, 85) AS Description,
                        p.PhotoURL
                        FROM tEscort e
                        INNER JOIN (tEscortPhoto ep INNER JOIN tPhoto p ON (ep.tPhoto_PhotoID = p.PhotoID AND p.Enabled=1)) 
                            ON e.EscortID = ep.tEscort_EscortID AND ep.ProfilePhoto = 1
                        INNER JOIN tUser u ON u.UserName = e.PrivateEmail
                        INNER JOIN tmembers m ON m.tUser_UserID = u.UserID
                        WHERE e.Enabled = 1
                        AND e.Active = 1
                        AND m.tMemberStatuses_MemberStatusID = 2
                        AND e.tEscortMembership_MembershipID != 6
                        ORDER BY rand()
                        LIMIT ?";       
            $stmt = $this->conn->prepare($query);
            $stmt->execute(array($limit));
            $result = $stmt->FetchAll(PDO::FETCH_OBJ);
            $this->conn = NULL; // force close DB
            $stmt = NULL; // empty $stmt
            $dbPDO = NULL; // force close this too in case it was open
            return $result; // return reults
        }
        catch (PDOException $ex) {
            // do some stuff (removed to keep this question clean)
            return false;
        }
    }

任何关于我如何能够做我想要的建议但是在查询运行后关闭连接的建议将不胜感激! 谢谢!

2 个答案:

答案 0 :(得分:1)

您好这是正确的文档,请参阅此链接。

http://php.net/manual/en/pdo.connections.php

答案 1 :(得分:0)

如果你不这样做,那就不那么严重了。成功连接到数据库后,PDO类的实例将返回到您的脚本。连接在PDO对象的生命周期内保持活动状态。要关闭连接,您需要通过确保删除对它的所有剩余引用来销毁对象 - 您可以通过为保存对象的变量赋值来执行此操作。如果您没有明确地执行此操作,PHP将在脚本结束时自动关闭连接。

http://php.net/manual/en/pdo.connections.php

所以答案是否定的,除非您在脚本执行期间因任何原因需要显式关闭连接,否则不需要执行任何操作,在这种情况下,只需将PDO对象设置为{{1} }。