Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php pdo:update+insert,然后选择返回null_Php_Mysql_Pdo - Fatal编程技术网

php pdo:update+insert,然后选择返回null

php pdo:update+insert,然后选择返回null,php,mysql,pdo,Php,Mysql,Pdo,出于某种原因,这段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 userl

出于某种原因,这段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批处理,它会工作并返回一个值,它工作得很好。但是没有按规定组合。那么我如何按原样运行它呢

对于select查询,我也尝试过此模型,但结果仍然相同:

$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();
     }

您是否在PDO下报告错误?我想可能是这样,但我认为默认情况下mysql使用准备好的查询模拟,所以可能不是。从手册中可以看出:在调用PDOStatement::execute时,必须为希望传递到语句中的每个值包含一个唯一的参数标记。除非启用模拟模式,否则在准备好的语句中不能多次使用同名的命名参数标记。当您说分别运行两个部分时,是否可以更明确一些?请记住分别运行每个查询。我现在将确保frm处于启用状态