2016-12-24 68 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