Ошибка параметра, SQLSTATE [HY093]: неверный номер параметра: параметр не был определен - PullRequest
0 голосов
/ 29 мая 2019

Итак, я получаю SQLSTATE [HY093]: Неверный номер параметра: параметр не был определен при попытке отправить форму. У меня есть папка для резервирования с файлом index.php, в котором есть включаемый файл reservations.html.php, который имеет формы в формате html.

Таким образом, мои формы в reservations.html.php, когда они заполнены и имеют значение в имени, будут затем пытаться отправить все значения в форме в таблицу резервирований, которую я создал в mysql. Ниже мой код в index.php

<?php

// Edit or Replace this try/catch statement to work with the current PHT configuration
include '../includes/db.inc.php';

// Modify the If statement so the try only runs if the First Name field has been submitted AND the honeypot field is empty ''
if (isset($_POST['myfname'])) {
    $myFName = $_POST['myfname'];
    $myTour = $_POST['tour'];
    $myLName = $_POST['mylname'];
    $myEmail = $_POST['myemail'];
    // If the if statement is true, save each form field value as a variable. These variable values will be used in the thank you page.

    // And run the try/catch to attempt to insert data in the database. Modify the INSERT statement to write all the form filed values (except the honeypot) to the database.
    try
    {
        $sql = 'INSERT INTO reservations SET
          tour = :tour,
          fname = :fname,
          lname = :lname,
          email = :email';
        $s = $pdo->prepare($sql);
        $s->bindValue(':tour', $myTour);
        $s->bindValue(':myfname', $myFName);
        $s->bindValue(':mylname', $myLName);
        $s->bindValue(':myemail', $myEmail);
        $s->execute();
    }
    catch (PDOException $e)
    {
        $error = 'Error adding submitted joke: ' . $e->getMessage();
        include '../includes/error.html.php';
        exit();
    }
    // load the thank you page after the INSERT runs
    include 'success.html.php';
    // Add an else to load the initial page if the initial (line 19) if statement is false
} else {
    include 'reservations.html.php'; //Modify this to include the initial file for this folder
}

1 Ответ

2 голосов
/ 29 мая 2019

Синтаксис для вашего оператора вставки отключен и выглядит как гибрид между вставкой и обновлением. Попробуйте эту версию:

$sql = "INSERT INTO reservations (tour, fname, lname, email) ";
$sql .= "VALUES (:tour, :fname, :lname, :email)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':tour', $myTour, PDO::PARAM_STR);
$stmt->bindParam(':fname', $myFName, PDO::PARAM_STR);
$stmt->bindParam(':lname', $myLName, PDO::PARAM_STR);
$stmt->bindParam(':email', $myEmail, PDO::PARAM_STR);
$stmt->execute();
$stmt->close();

Для ясности, оператор вставки SQL принимает следующие вещи:

  • Ключевые слова INSERT INTO, за которыми следует список столбцов
  • Затем предложение VALUES, за которым следует кортеж, содержащий значения для вставки

Существует также INSERT INTO ... SELECT, который использует оператор выбора для предоставления значений, но вы не используете эту форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...