mysql插入记录不能立即可用,选择count(*)不会马上看到它

时间:2017-01-20 00:12:17

标签: php mysql

在我的PHP代码中,我有一个Mysql查询:

SELECT COUNT(*) 

查看记录是否已经存在,如果它不存在,我会执行:

INSERT INTO <etc>

但如果有人在大约一秒左右重新加载,则SELECT COUNT(*)看不到插入的记录。

$ssql="SELECT COUNT(*) as counts FROM `points`  WHERE `username` LIKE '".$lusername."' AND description LIKE '".$desc."' AND `info` LIKE '".$key."' AND `date` LIKE '".$today."'";  
$result = mysql_query($ssql);  
$row=mysql_fetch_array($result);  
if ($row['counts']==0) // no points for this design before  
    {  
    $isql="INSERT INTO `points` (`datetime`,`username`,`ip`,`description`,`points`,`info`, `date`,`uri`) ";  
    $isql=$isql."VALUES ('".date("Y-m-d H:i:s")."','".$lusername."',";  
    $isql=$isql."'".$_SERVER['REMOTE_ADDR']."','".$desc."','".$points."',";  
    $isql=$isql."'".$key."','".$today."','".$_SERVER['REQUEST_URI']."')";  
    $iresult = mysql_query($isql);  
    return(true);  
    }  
else  
    return(false);  

我使用的是MyISAM数据库类型

1 个答案:

答案 0 :(得分:0)

不要运行两个单独的查询,只需使用REPLACE INTO

来自文档:

  

REPLACE的工作原理与INSERT完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。

例如,如果您的关键字段为id,那么:

REPLACE INTO my_table SET id = 4 AND other_field = 'foobar'
如果没有id为4的记录,

将被插入,或者如果有,则将其替换为foobar的other_field值。