Как проверить действителен ли пин код в базе данных по его дате?

В базе данных в таблице pin_code храню пин коды, дату создания и дату завершения действия пин кода.

MySQL

mysql> SELECT * FROM pin_code;
+----------+----------------+---------------------+----------------+
| id       | code           | create_date         | destroy_date   |
+----------+----------------+---------------------+----------------+
|        1 | 6194027126     | 1605500754          | 1607500754     |
|        2 | 5807462325     | 1607808551          | 1609508551     |
+----------+----------------+---------------------+----------------+

 `create_date` int UNSIGNED NOT NULL DEFAULT '0',
 `destroy_date` int UNSIGNED NOT NULL DEFAULT '0'

PHP - получаю ответ если пин код имеется и дата его не просрочена.

//MySqli Select Query
$results = $mysqli->query("SELECT * FROM pin_code WHERE code=5807462325 AND destroy_date > unix_timestamp(now())");  // destroy_date - дата завершения срока действия пин кода должна быть больше текущей

print '<table border="1">';
while($row = $results->fetch_assoc()) {
    print '<tr>';
    print '<td>'.$row["id"].'</td>';
    print '<td>'.$row["code"].'</td>';
    print '<td>'.$row["create_date"].'</td>';
    print '<td>'.$row["destroy_date"].'</td>';
    print '</tr>';
}
print '</table>';

Все пин коды имеют уникальные значения

Не получается корректно проверить из PHP скрипта наличие пин кода в базе и определить действителен код или его время истекло (create_date - дата создания кода, destroy_date - дата завершения срока действия пин кода).

Нужно получить статусы: пин код есть или нет, пин код действителен (если он есть) или просрочен.

Помогите разобраться с проверками.

Спасибо!

UPD.

Сделал так:

$results = $mysqli->query("SELECT code, (destroy_date > unix_timestamp(now())) `status` FROM pin_code WHERE code=6194027126");  // destroy_date - дата завершения срока действия пин кода должна быть больше текущей

print '<table border="1">';
if($row = $results->fetch_assoc()) {
   if($row["status"] == 1){
    print '<tr>';
    print '<td>'.$row["code"].'</td>';
    print '<td>'.$row["status"].'</td>';
    print '<td>Пин код действителен</td>';
    print '</tr>';
}else{
    print '<tr>';
    print '<td>'.$row["code"].'</td>';
    print '<td>'.$row["status"].'</td>';
    print '<td>Пин код просрочен</td>';
    print '</tr>';
}}else{
print '<td>'.$row["code"].'</td>';
print 'Нет такого пин кода';
}
print '</table>';

Задача решена, осталось для статусов задать нужный вывод.


Ответы (1 шт):

Автор решения: Akina
SELECT CASE WHEN pin_code.code IS NULL                THEN 'не существует.'
            WHEN destroy_date < UNIX_TIMESTAMP(NOW()) THEN 'просрочен'
                                                      ELSE 'действителен'
                                                      END AS status
FROM (SELECT '5807462325' code) src
LEFT JOIN pin_code USING (code);

Полученный ответ можно напрямую вставлять в создаваемый интерфейс: print '<td>Пин код '.$row["status"].'</td>';. И никаких проверок не надо... ну кроме как на ошибку при обращении к серверу / выполнении запроса.

→ Ссылка