Как проверить был ли выполнен запрос (prepared statements)?

 <html>
  <body>
        <fieldset>
            <legend>Введите данные о человеке</legend>
        <form method="POST">
            <div class="inner">
                <div class="input-area">
                    <label for="name">Имя:</label>
                    <input type="text" name="name" id="name">
                </div>

                <div class="input-area">
                    <label for="age">Возраст:</label>
                    <input type="text" name="age" id="age">
                </div>

                <div class="input-area">
                    <label>Пол:</label>
                    <input type="radio" name="gender" value="male">Мужской
                    <input type="radio" name="gender" value="female">Женский
                </div>
            </div>
            <input type="hidden" name="check" value="1">
            <input type="submit" value="Занести данные в базу">
        </form>
    </fieldset>
    <?php
        require_once "../reg file/login.php";
        $con = new mysqli($hn, $un, $pw, $db);
        if ($con->connect_error) die("Сбой подключения к БД.");

        if (isset($_POST["check"])) {
            if (isset($_POST["name"], $_POST["age"], $_POST["gender"]) === false) {
                die("Вы не ввели одно или несколько полей");
            }

            $name = $_POST["name"];
            $age = $_POST["age"];
            $gender = $_POST["gender"];
            echo $name;
            echo $age;
            echo $gender;
            echo "<br>";
            $stmt = $con->prepare("INSERT INTO people(name, age, gender) VALUES(?, ?, ?)");
            $stmt->bind_param("sis", $name, $age, $gemder); //В имени переменной $gender 
//специально допущена ошибка - $gemder, следовательно, запрос 
//не отрабатывает, но "Ошибка" не выводится
            $stmt->execute();
            if ($stmt->affected_rows == 0) die("Ошибка");
            $stmt->close();
        }

        $con->close();

    ?>
</body>

В функции bind_param() я специально допустил ошибку в названии переменной $gender, запрос не отработал, но условие проверки правильности запроса почему-то не срабатывает. Как правильно проверять результат работы prepared statements?


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

Автор решения: teran

Обратитесь к документации:PDOStatement::execute

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

не надо для этого проверять число затронутых строк, это вообще чисто справочная информация, и совершенно ничего не говорит о корректности запроса.

→ Ссылка