आप IF स्टेटमेंट का गलत इस्तेमाल कर रहे हैं
INSERT INTO userlist (username, lastupdate, programruncount, ip)
VALUES (:username, NOW(), 1, :ip)
ON DUPLICATE KEY UPDATE
lastupdate = IF(lastupdate > NOW() - INTERVAL 20 MINUTE, NOW(), lastupdate),
programruncount = IF(lastupdate > NOW() - INTERVAL 20 MINUTE, programruncount + 1, programruncount),
ip = IF(lastupdate > NOW() - INTERVAL 20 MINUTE, :ip, ip);
इसलिए IF किसी शर्त की जांच करता है और उसके पैरामीटर के रूप में प्रदान किए गए दो मानों में से एक लौटाता है। देखें MySQL के फ्लो कंट्रोल ऑपरेटर्स .