Что означает ошибка "Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined"?

Ошибка возникает из-за неправильного использования имен параметров в вашем запросе SQL. Вместо использования `:owner-id`, `:users-id`, и `:admins-id` в привязке параметров, вы должны использовать `:owner_id`, `:users_id`, и `:admins_id`. Вот исправленный код:

```php
error_reporting(E_ALL);
ini_set('display_startup_errors', 1);
ini_set('display_errors', '1');
if(!isset($_SESSION['login_id'])){
    echo "Вы не авторизированы";
    exit();
}
$id = $_SESSION['login_id'];
require_once '../boot.php';
$name = $_GET["name"];
$stmt = pdo()->prepare("INSERT INTO `chats` (`id`, `name`, `owner_id`, `users_id`, `admins_id`) VALUES (NULL, :name, :owner_id, :users_id, :admins_id)");
$stmt->execute([
    'name' => $name,
    'owner_id' => $id,
    'users_id' => $id,
    'admins_id' => $id,
]);
```

После внесения этих изменений, ошибка должна исчезнуть.
  • 4 октября 2023 г. 15:07
Ответы на вопрос 2
Ошибка "Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined" может возникнуть из-за неправильного использования имен параметров в запросе SQL. В данном случае, ошибка возникает потому что в привязке параметров используются неверные имена.

Вместо использования `:owner-id`, `:users-id`, и `:admins-id` в привязке параметров, следует использовать `:owner_id`, `:users_id`, и `:admins_id`. Правильный код должен быть таким:

```php
error_reporting(E_ALL);
ini_set('display_startup_errors', 1);
ini_set('display_errors', '1');
if (!isset($_SESSION['login_id'])) {
    echo "Вы не авторизированы";
    exit();
}
$id = $_SESSION['login_id'];
require_once '../boot.php';
$name = $_GET["name"];
$stmt = pdo()->prepare("INSERT INTO `chats` (`id`, `name`, `owner_id`, `users_id`, `admins_id`) VALUES (NULL, :name, :owner_id, :users_id, :admins_id)");
$stmt->execute([
    'name' => $name,
    'owner_id' => $id,
    'users_id' => $id,
    'admins_id' => $id,
]);
```

После внесения указанных изменений, ошибка должна быть устранена.
В названиях плейсхолдеров можно использовать только цифры, латинские буквы и символ подчёркивания. Пример: [0-9a-zA-Z_]
Похожие вопросы