我使用自己的mvc框架。
并且后期行动是:
function post($pid = 0 , $title = '')
{
$pid = $this->input->clean($pid);
$stm =$this->Post->query("UPDATE posts SET `show_count`=show_count+1 WHERE id = $pid");
$stm->execute();
$row = $this->Post->find()->where(array('id'=>$pid))->fetchOne();
$this->layout->set('comments' , $this->comments($pid));
$this->layout->set('row' , $row);
$this->side();
$this->layout->view('post');
echo $this->layout->render($row['title']);
}
我想从数据库中获取记录加一个show_count列。
我使用此查询:
UPDATE posts SET show_count = show_count + 1 WHERE id = $pid
这个权限在localhost中但在我的共享主机中运行查询而不是一个加号,2加上show_count列。
我该如何解决这个问题?
答案 0 :(得分:0)
这是很常见的情况 您正在运行您的脚本两次。可能是因为浏览器调用它两次。检查你的重写规则。
答案 1 :(得分:0)
它在您的本地主机中工作,但不在您的互联网主机上。主持人可能会在幕后做一些让它无法正常工作的事情。此外,由于您无法访问主机服务器上的所有配置内容,因此您可能无法修复它。
最简单的解决方法是在软件层中执行此操作(假设$ pid是唯一的)。
首先获取show_count。
然后:
$oldShowCount = the current show_count
$newShowCount = $oldShowCount + 1
UPDATE posts SET show_count = $newShowCount WHERE id = $pid AND show_count = $oldShowCount
此时,如果没有出现竞争条件,该行将更新(行更新= 1)。如果发生竞争条件,则更新将失败(行更新= 0)。
然后检查更新的#行以验证它是否有效并重复直到它为止。