2016-12-24 69 views
1

出于某种原因,在执行这个PHP代码返回NULL ...反刍ANY1纠正它好心帮?PHP PDO:更新+插入,然后选择返回null

public function like($pid) 
     { 
      $uid = escape($_SESSION['user']); 
      $sql = $this->_db->prepare("UPDATE postsinitial SET likes = likes+1 WHERE pid = :m;INSERT IGNORE INTO userlikedposts (ulp_userid,ulp_postid) VALUES (:k, :m)"); 
      $sql->bindValue(':k', $uid); 
      $sql->bindValue(':m', $pid); 
      $sql->execute(); 

      $query = $this->_db->prepare("SELECT likes FROM postsinitial WHERE pid = :n"); 
      $query->bindParam(':n', $pid); 
      $query->execute(); 
      while($rows = $query->fetch()) 
      { 
       return $rows['likes']; 
      } 

     } 

但是,当我单独运行查询两个部分组成,即注释掉$ SQL批处理代码,并单独运行$查询批处理,它的工作原理,并返回一个值..,它工作正常..但没有组合如所述..所以我如何运行它是?

我已经试过这种模式也为select查询BT还是同样的结果:

$query = $this->_db->prepare("SELECT likes FROM postsinitial WHERE pid = :n"); 
      $query->bindParam(':n', $pid); 
      $query->execute(); 
      while($rows = $query->fetch(PDO::FETCH_ASSOC)) 
      { 
       return $rows[0]['likes']; 
      } 
+0

您是否在PDO下报告错​​误?我认为它可能是以下内容,但我认为默认情况下,mysql使用准备好的查询模拟,所以也许不会。从手册:当您调用PDOStatement :: execute()时,您必须为每个希望传入语句的值包含唯一的参数标记。除非启用了仿真模式,否则不能在准备好的语句中多次使用同名的命名参数标记。 – Progrock

+0

当你说分开运行两个部分时,你能更明确吗? – Progrock

回答

0

答案很简单:

您应该运行一个查询中一个,而不是他们都塞进一个电话。运行插入查询分隔ROM更新,你会没事的。

 public function like($pid) 
    { 
     $sql = "UPDATE postsinitial SET likes = likes+1 WHERE pid = ?"; 
     $this->_db->prepare($sql)->execute($_SESSION['user']); 

     $sql = "INSERT IGNORE INTO userlikedposts (ulp_userid,ulp_postid) VALUES (?, ?)"; 
     $this->_db->prepare($sql)->execute([$_SESSION['user'], $pid]); 

     $stmt = $this->_db->prepare("SELECT likes FROM postsinitial WHERE pid = ?"); 
     $stmt->execute([$pid]); 
     return $stmt->fetchColumn(); 
    } 
+0

tysm..works now !! – Vanessa341

+0

只记得单独 –

+0

运行的每个查询都行FR确认FRM现在开始 – Vanessa341