簡體   English   中英

php pdo:update + insert然后選擇return null

[英]php pdo : update + insert and then select returns null

出於某種原因,這個執行的PHP代碼返回NULL ... cud any1請幫助糾正它?

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批處理代碼並單獨運行$ query批處理時,它工作並返回一個值..,它工作正常..但沒有按照說明組合..那我怎么按原樣運行呢?

我也嘗試過這個模型用於選擇查詢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'];
             }

答案很簡單:

您應該逐個運行查詢,而不是將它們全部填充到一個調用中。 運行你的插入查詢分離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();
     }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM