Еще одно соединение в рамках попытки - PullRequest
0 голосов
/ 22 февраля 2011

Добрый день всем, у меня есть сомнения.

У меня есть SELECT с PDO.В другом 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 голосов
/ 22 февраля 2011

Вложенные транзакции невозможны (как указано в сообщении об ошибке).В первой строке вы начинаете одну транзакцию.В цикле вы вызываете avatar(), который запускает другую транзакцию, которая завершается неудачей, потому что она уже есть.

Однако для SELECT -запросов вам вообще не нужны транзакции.Просто опустите это.Вы также можете подумать о JOIN, чтобы вы могли обрабатывать все в одном запросе (и тогда транзакции действительно бесполезны).

0 голосов
/ 22 февраля 2011

Может быть, пока нет ответа на проблему, но эта строка:

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

полон ошибок.

  1. " не сбежали.
  2. нет ; в конце.
  3. Вы пытаетесь присвоить значение переменной внутри echo. Это выдаст ошибку.

Если вы не используете функцию 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();
}
0 голосов
/ 22 февраля 2011

Вы должны закрыть курсор перед вызовом новой транзакции. Кроме того, могу я спросить, почему вы создаете транзакции, поскольку вы делаете только простые * выбор * с?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...