Не могу понять где собака зарыта.

soulectro

Новичок
Доброго времени!

Есть простой код:
PHP:
<?php
require_once "db.php";
if (isset($_POST['crtNum']) && !empty($_POST['crtNum']) && is_numeric($_POST['crtNum'])) {
    $stmt = $pdo->query("SELECT * FROM certs WHERE cert_num = ".$_POST['crtNum']);
    if ($stmt->fetchColumn() > 0) {
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $term = $row['term'];
        }
        echo $term;
     } else {
         echo "Такого сертификата нет в базе.";
     }
} else {
    echo "Введите номер сертификата. Номер сертификата должен содержать только цифры.";
}
?>
При выполнении выдает: Notice: Undefined variable: term in C:\xampp\htdocs\kanitel\api.php on line 11 , это при том, что передан верный номер сертификата, который есть в базе.
Если убрать проверку $stmt->fetchColumn() > 0, то он при тех же вводных выдает то, что нужно, но при этом если я введу заведомо неверный номер выдаст вышеуказанную ошибку.
Голову ломаю, никак не могу понять в чем проблема.
 

Фанат

oncle terrible
Команда форума
А можешь объяснить, что такое if ($stmt->fetchColumn() > 0) { и что оно вообще должно тут делать?
или "я без понятия, видел в другом месте, скопировал себе"?
 

soulectro

Новичок
А можешь объяснить, что такое if ($stmt->fetchColumn() > 0) { и что оно вообще должно тут делать?
или "я без понятия, видел в другом месте, скопировал себе"?
Грубо говоря да, взял на стаке кусок, под вопросом типа "Как проверить возвращает ли что-то запрос?". Почитал по ссылке от AnrDaemon, внял, переделал, работает. В частности убрал while и эту проверку. Сейчас код выглядит так:
PHP:
    $stmt = $pdo->prepare("SELECT * FROM certs WHERE cert_num = ?");
    $stmt->execute(array($_POST['crtNum']));
    $result = $stmt->fetch();
    if ($result) {
        echo $result['term'];
    } else {
        echo "Такого сертификата нет в базе данных.";
    }
 

AnrDaemon

Продвинутый новичок
Ну вот видишь, достаточно понять, что делает твой код. как ошибки сами собой испаряются.
 
Сверху