获取mysql-link资源错误 - 但是在之前使用的相同成功链接资源上

时间:2011-04-06 17:09:29

标签: php mysql

我有这段代码:

public function delete($messageID) {
    if (is_array($this->sentArr)) {
        foreach ($this->sentArr as $key => $value) {
            $implodeData[$key] = $this->sentArr[$key]->messageID;
            if ($this->sentArr[$key]->messageID == $messageID) {
                unset($this->sentArr[$key]);
                }
            }
        $implodedSent = implode(',', $implodeData);
        $result = $this->_database->updatePMUser('sentArr', $implodedSent, 'UID', $this->UID);
        }

这只是在私人邮件类邮件脚本中删除邮件的代码。在此脚本部分触发之前,我使用$ this-> _database->多次提取消息的名称等 - 一切正常,但当我单击删除按钮并处理请求并将我发送到上面的函数时,我收到以下错误:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user '*private*'@'localhost' (using password: NO) in /var/www/html/evoHTDOCS/tinUser_database.php on line 25

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /var/www/html/evoHTDOCS/tinUser_database.php on line 25

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /var/www/html/evoHTDOCS/tinUser_database.php on line 210
Access denied for user '*private*'@'localhost' (using password: NO)ERROR2

最后忽略“ERROR2”,这只是非结果的捕获,它告诉我哪个部分的脚本出错了。无论如何 - 我在同一个类的同一个实例中多次使用相同的链接资源($ this->连接)而没有错误 - 但由于某种原因,这个会引发该错误。另外,对我来说奇怪的是,在错误消息中,用户名与我用于登录的用户名不同(它们是在配置文件中定义的常量) - 它使用主用户名而不是我的用户是的,我检查了权限和它们都已设置(再次,它在此函数之前多次链接相同的信息。)听起来突然它说它无法连接到应该已经连接的数据库。

如果需要,这里是数据库部分,它启动链接,然后是导致错误的函数:

public function __construct() {
    $this->connection = mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD) or die(mysql_error());
    mysql_select_db(DB_NAME, $this->connection) or die(mysql_error());

public function updatePMUser($field, $data, $whereField, $whereData) {
    $data = $this->escapeString($data);
    $query = "UPDATE ".PM_USERS_TABLE." SET ".$field." = '$data' WHERE ".$whereField." = '$whereData'";
    $result = mysql_query($query, $this->connection);
    if ($result)
        return $result;
    else {
        echo mysql_error();
        die("ERROR2");
        }
    }

这一切仍在制作中,所以是的,有一些修剪要做,但是什么可能导致完全相同的连接在特定功能突然失败?我已经检查并重新检查了拼写和所有这些。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

问题是我正在序列化附加了数据库对象的对象。显然,序列化会破坏数据库连接资源。为了解决这个问题,我添加了一个__wakeup魔术方法,在反序列化后重新建立连接:

public function __wakeup() {
   $this->__construct();
   }