php pdo:update+insert,然后选择返回null
出于某种原因,这段php代码在执行时返回NULL…cud any1请帮助更正它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
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处于启用状态