डेटाबेस में डुप्लिकेट उपयोगकर्ता नामों को रोकने का सबसे अच्छा तरीका डेटाबेस कॉलम को प्राथमिक कुंजी बनाना या इसे अद्वितीय के रूप में चिह्नित करना है।
-- Make it a primary key
ALTER TABLE users ADD PRIMARY KEY(username);
-- or set it to be unique
ALTER TABLE users ADD UNIQUE (username);
यह एक ही उपयोगकर्ता नाम के साथ तालिका में डुप्लिकेट रिकॉर्ड को रोकेगा। जब आप वही डालने का प्रयास करेंगे तो एक त्रुटि उत्पन्न होगी।
फिर आप PHP में अपवाद पकड़ सकते हैं और कारण की जांच कर सकते हैं। डुप्लिकेट बाधा SQL त्रुटि कोड 1062 है।
पीडीओ का उपयोग करते समय इस त्रुटि को कैसे पकड़ें इसका एक उदाहरण यहां दिया गया है:
$error = [];
$username = 'Dharman';
$pdo = new \PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'user', 'password', [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, // make sure the error reporting is enabled!
\PDO::ATTR_EMULATE_PREPARES => false
]);
try {
$stmt = $pdo->prepare('INSERT INTO users(username) VALUE(?)');
$stmt->execute([$username]);
} catch (\PDOException $e) {
if ($e->errorInfo[1] === 1062) {
$error[] = "This username is already taken!";
}
}
यहाँ एक उदाहरण दिया गया है कि mysqli का उपयोग करते समय इस त्रुटि को कैसे पकड़ा जाए:
$error = [];
$username = 'Dharman';
// make sure the error reporting is enabled!
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'user', 'password', 'test');
$mysqli->set_charset('utf8mb4');
try {
$stmt = $mysqli->prepare('INSERT INTO users(username) VALUE(?)');
$stmt->bind_param('s', $username);
$stmt->execute();
} catch (\mysqli_sql_exception $e) {
if ($e->getCode() === 1062) {
$error[] = "This username is already taken!";
}
}