запись вставки mysql недоступна сразу, select count (*) не видит ее сразу

В моем 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

Решение

Вместо запуска двух отдельных запросов просто используйте REPLACE INTO.

Из документации:

REPLACE работает точно так же, как INSERT, за исключением того, что если старая строка в таблице имеет то же значение, что и новая строка для PRIMARY KEY или UNIQUE индекса, старая строка удаляется перед вставкой новой строки.

Например, если ваше ключевое поле id затем:

REPLACE INTO my_table SET id = 4 AND other_field = 'foobar'

будет вставлен, если нет записи с идентификатором 4, или если есть, то заменит значение other_field на foobar.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector