尝试中的另一个连接

时间:2011-02-22 12:49:49

标签: php pdo

大家下午好,我有疑问。

我有一个带PDO的SELECT。必须在另一个SELECT WHILE中完成更多操作以获取该选择的数据,从而为其提供更多

错误(错误:已经有活动的交易)。

如果有人能帮助我,请感激不尽。

示例代码。

try{
     $this->conex->beginTransaction();
     $query = $this->conex->prepare("SELECT idUser FROM usuario WHERE id = :id ORDER BY data DESC LIMIT $pagin, $paginaF");
     $query->bindParam(":id", $ID, PDO::PARAM_INT, 20); 
     $query->execute();
     while ($lista = $query->fetch()){
       $idUser = $lista['idUser'];
       echo "<div id='avatar'>"box::avatar($idUser)."</div>"
     }    
//Here he works out of WHILE. Inside it does not work...
echo box::avatar($idUser);
$this->conex->commit();
}catch (PDOException $ex) {
     echo "Erro: " . $ex->getMessage();
}

public function avatar($idUser){
     $idUser = (int) $idUser;
     $query = $this->conex->prepare("SELECT avatar FROM login WHERE id = :id LIMIT 1");
     $query->bindParam(":id", $idUser, PDO::PARAM_INT, 20);
     $query->execute();
     while ($avatar = $query->fetch()){
         $avatar = $avatar['avatar'];
     }
  return $avatar;
}

3 个答案:

答案 0 :(得分:0)

您必须在调用新事务之前关闭光标。 此外,我可以问你为什么要创建交易,因为你只做简单的* 选择 * s?

答案 1 :(得分:0)

无法嵌套事务(如错误消息所述)。在第一行中,您启动一​​个事务。在循环中,您调用avatar(),它启动另一个失败的事务,因为已经有一个事务。

然而,对于SELECT - 查询,您根本不需要交易。只是省略它。 您也可以考虑JOIN,这样您就可以只处理一个查询(然后事务真的无用)。

答案 2 :(得分:0)

目前可能不是问题的答案,但这一行:

echo "<div id="avatar">".$box = box::avatar($id)."</div>"

充满了错误。

  1. "未被转义。
  2. 最后没有;
  3. 您正在尝试为echo内的变量赋值。这会引发错误。

  4. 如果您未在其他地方使用avatar()功能,则可以执行以下操作:

    try{
     $this->conex->beginTransaction();
     $query = $this->conex->prepare("SELECT usuario.id as id, login.avatar as avatar FROM usuario, login WHERE usuario.id = :id and usuario.id ORDER BY data DESC LIMIT $pagin, $paginaF");
     $query->bindParam(":id", $ID, PDO::PARAM_INT, 20); 
     $query->execute();
     while ($lista = $query->fetch()){
       $id = $lista['id'];
       $avatar = $lista['avatar']
       echo '<div id="avatar">'.$avatar.'</div>';
     }    
    }catch (PDOException $ex) {
     echo "Erro: " . $ex->getMessage();
    }