mysql加一个列

时间:2011-10-21 12:57:07

标签: php mysql

我使用自己的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列。

我该如何解决这个问题?

2 个答案:

答案 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)。

然后检查更新的#行以验证它是否有效并重复直到它为止。