Я пытаюсь создать систему, в которой мой сайт генерирует уникальный код (текущая дата + 5 случайных символов), и этот код переносится в таблицу в моей базе данных.
Прежде чем функция generateNumber () сможет вставить уникальный код в базу данных, она должна проверить, существует ли код в базе данных.
Если код не существует, моя функция работает безупречно.Но проблема в том, что когда код уже может быть найден в базе данных, мой веб-сайт просто ничего не делает (он должен просто перезапустить функцию).
function generateNumber()
{
global $conn;
$rand = strtoupper(substr(uniqid(sha1(time())),0,5));
$result = date("Ydm") . $rand;
$SQL = $conn->query("SELECT code FROM test WHERE code='$result'");
$c = $SQL->fetch(PDO::FETCH_ASSOC);
if ($c['code'] > 0) { // test if $result is already in the database
generateNumber();
} else {
$sql2 = "INSERT INTO test (code) VALUES (?)";
$stmt2 = $conn->prepare($sql2);
$stmt2->execute([$result]);
return $result;
}
}
try {
$conn = new PDO("sqlite:db"/*, $username, $password*/);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo generateNumber();
}
catch(PDOException $e) {
echo "Error:" . $e->getMessage();
}
$conn = null;
?>
Вконсоль, но я подозреваю, что проблема в этой части кода:
if ($c['code'] > 0) { // test if $result is already in the database
generateNumber();
}
Есть идеи, как лучше написать эту функцию?