Я хочу проверить, если username
уже существует и выдает сообщение об ошибке, если существует, какие-либо советы, как я могу это сделать?
Я уже пытался искать, но только нашел mysql_errno
но это не сработает для меня.
if ($valid) {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$password = md5($password);
$sql = "INSERT INTO users (username,password,role) values(?, ?, ?)";
$q = $pdo->prepare($sql);
$q->execute(array($username,$password,$role));
Database::disconnect();
header("Location: index.php");
}
SD
Если вы хотите проверить, если username
уже используется:
SELECT * FROM users WHERE username = :username
Если вы вернете одну строку: Вы бросаете свою ошибку, иначе ты делаешь INSERT
Итак, ваш код должен выглядеть так:
if ($valid) {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql_check = "SELECT * FROM users WHERE username = :username";
$test = $pdo->prepare($sql_check);
$test->bindParam(':username', $username);
$test->execute;
Теперь вот два решения, чтобы проверить, есть ли у вас одна строка:
if($test->rowCount() > 0) {
// error
}
или же
$user = $test->fetch();
if (!empty($user)) {
// error
}
А теперь, если у вас нет ошибки, вставьте:
else {
//$password = md5($password);
$sql = "INSERT INTO users (username,password,role) values(?, ?, ?)";
$q = $pdo->prepare($sql);
$q->execute(array($username,$password,$role));
Database::disconnect();
header("Location: index.php");
}
}
Два решения:
Вы можете сделать поле имени пользователя уникальным, таким образом, MYSQL выдаст ошибку, если вы попытаетесь вставить строку с существующим именем пользователя.
$sql = "INSERT INTO users (username,password,role) values(?, ?, ?)";
$q = $pdo->prepare($sql);
$result = $q->execute(array($username,$password,$role));
if(!$result) {
// print out your error message
}
В противном случае сделайте выборку с желаемым именем пользователя и посмотрите, будет ли возвращена строка (= уже используется) или нет (= доступна).
$sql = "SELECT COUNT(*) as count FROM users WHERE username = ?";
$q = $pdo->prepare($sql);
$q->execute(array($username));
$result = $q->fetchAll();
// test result, if 1 > print error, etc
SELECT * FROM users WHERE username = $username
Если найдена ошибка показа, вставьте еще
<?php
$getUniqueUsername=$con->query("select * from user where name='$user_name");
$rowCount=$getUniqueUsername->num_rows;
if($rowCount) {
$insertQuery=$con->query("insert into table_name (field_name) Values('".$values."'));
}
?>