बेहतर होगा कि आप अपने कॉलम में जांच और डालने के बजाय डुप्लिकेट डेटा को रोकने के लिए एक बाधा सेट करें।
बस imdbid
. पर एक UNIQUE बाधा सेट करें :
ALTER TABLE `requests` ADD UNIQUE `imdbid_unique`(`imdbid`);
ऐसा करने का कारण यह है कि आप एक दौड़ की स्थिति में नहीं आते हैं। ।
जांच पूरी करने और वास्तव में डेटा डालने के बीच एक छोटी सी विंडो है, और उस छोटी विंडो में, डेटा डाला जा सकता है जो सम्मिलित किए जाने वाले डेटा के साथ विरोध करेगा।
समाधान? बाधाओं का प्रयोग करें और $DBH->error()
चेक करें सम्मिलन त्रुटियों के लिए। यदि कोई त्रुटि है, तो आप जानते हैं कि एक डुप्लिकेट है और आप तब अपने उपयोगकर्ता को सूचित कर सकते हैं।
मैंने देखा है कि आप इसका उपयोग कर रहे हैं, $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
. इस मामले में, आपको ->error()
check की जांच करने की आवश्यकता नहीं है क्योंकि पीडीओ अपवाद फेंक देगा। बस अपने निष्पादन को इस तरह से आज़माएं और पकड़ें:
$duplicate = false;
try {
$STH->execute();
} catch (Exception $e) {
echo "<p>Failed to Request ".$_POST['imdbid']."!</p>";
$duplicate = true;
}
if (!$duplicate)
echo "<p>Successfully Requested ".$_POST['imdbid']."! Thanks!</p>";