大家下午好,我有疑问。
我有一个带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;
}
答案 0 :(得分:0)
您必须在调用新事务之前关闭光标。 此外,我可以问你为什么要创建交易,因为你只做简单的* 选择 * s?
答案 1 :(得分:0)
无法嵌套事务(如错误消息所述)。在第一行中,您启动一个事务。在循环中,您调用avatar()
,它启动另一个失败的事务,因为已经有一个事务。
然而,对于SELECT
- 查询,您根本不需要交易。只是省略它。
您也可以考虑JOIN
,这样您就可以只处理一个查询(然后事务真的无用)。
答案 2 :(得分:0)
目前可能不是问题的答案,但这一行:
echo "<div id="avatar">".$box = box::avatar($id)."</div>"
充满了错误。
"
未被转义。;
。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();
}