In article <[EMAIL PROTECTED]>,
"Aleksandr V. Dyomin" <[EMAIL PROTECTED]> writes:

> $key='somekeyvalue';
> dbquery("update sometable set count=count+1 where keyfield='$key'");
> if(mysql_affected_rows()<1)
>       dbquery('insert into sometable set keyfield='$key', count=1');
> ---

> First question: this is good method?

It's good if you expect the UPDATE normally to succeed.  Otherwise,
you should first try the INSERT.

> Second... My script work on many different hosts with different
> hardware, os(only Linux or FreeBSD), and different PHP and MySQL
> version. It works fine excepting one thing... Sometime happens errors
> like:
> MySQL: Duplicate entry 'somekeyvalue' for key 1, query was: insert into
> sometable set keyfield='somekeyvalue', count=1

> Why this happens? On some hosts this messageis very rare, but on others
> - so often... I cant understand reason :(

You have a race condition:

* Client 1 tries UPDATE, sees that it fails
* Client 2 tries UPDATE, sees that it fails
* Client 1 does INSERT - okay
* Client 2 does INSERT - duplictae key error

If you think this happens seldom, do the following:

1. Try UPDATE
2. If it fails: try INSERT
3. If it fails due to a duplicate key error: repeat step 1


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to