1

尝试执行此操作时:

        // make unread notifications
        $db->sqlquery("SELECT `participant_id` FROM `user_conversations_participants` WHERE `conversation_id` = ? AND `participant_id` != ?", array($_POST['conversation_id'], $_SESSION['user_id']));
        while ($participants = $db->fetch())
        {
            $db->sqlquery("UPDATE `user_conversations_participants` SET `unread` = 1 WHERE `participant_id` = ?", array($participants['participant_id']));
        }

我似乎收到了这个错误:

警告:PDOStatement::fetch() [pdostatement.fetch]: SQLSTATE[HY000]: 第 68 行 /home/gamingon/public_html/prxa.info/includes/class_mysql.php 中的一般错误

这是我的查询和获取功能:

// the main sql query function
public function sqlquery($sql, $objects = array())
{
    global $core;

    try
    {
        $this->STH = $this->database->prepare($sql);

        foreach($objects as $k=>$p)
        {
            // +1 is needed as arrays start at 0 where as ? placeholders start at 1 in PDO
            if(is_numeric($p))
            {
                $this->STH->bindValue($k+1, (int)$p, PDO::PARAM_INT);
            }
            else
            {
                $this->STH->bindValue($k+1, $p, PDO::PARAM_STR);
            }
        }

        $this->counter++;

        return $this->STH->execute();
    }

    catch (Exception $e)
    {
        $core->message($e->getMessage());
    }
}

public function fetch()
{
    $this->STH->setFetchMode(PDO::FETCH_ASSOC); 
    **return $this->STH->fetch();**
}
4

1 回答 1

4

在循环的第一次迭代期间,您会覆盖实例的STH属性。$db换句话说:

  1. 你做一个 SELECT 查询,$db->STH是一个 SELECT 准备好的语句。
  2. fetch()对 SELECT 语句进行调用,该语句有效。
  3. 第一次循环迭代:您$db->STH使用 UPDATE 准备好的语句覆盖。
  4. 就在第二次循环迭代之前:你不能再fetch()调用了,因为 SELECT 语句已经消失了,一个 INSERT 语句在它的位置。

重构您的数据库类或创建$db' 类的新实例(使用不同的变量名!)以在循环中使用。

于 2012-12-11T16:06:02.203 回答