在我的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数据库类型
答案 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值。