Ошибка HY093 при выполнении INSERT в таблице

0

Изображение 174551 Это таблица, где я пытаюсь вставить.

Когда я пытаюсь сделать вставку с помощью pdo, я получаю следующую ошибку:

Массив ([0] => HY093 [1] => [2] =>)

Вся информация поступает из HTML-формы.

Соединение с db работает, потому что перед тем, как сделать эту вставку, я делаю выборку, чтобы не проблема.

Я уже проверил все переменные с помощью echo, и они верны.

Также попытался добавить столбец "id" в sql и присвоить ему значение NULL, но ошибка такая же, как указано выше. Но так как столбец id автоматически увеличивается, я не поместил его в sql. Посмотрите мой код выше, чтобы понять, что я сделал.

$nome = $_POST['name'];
$mail = $_POST['email'];
$psw = $_POST['pass'];
$ni = $_POST['nif']; 

Эти две переменные происходят из выборки, и это работает. Они здесь только потому, что принадлежат оператору Insert.

$roleid = $row['id'];
$rolen = $row['nome'];    

$sql = "INSERT INTO users ( nome, email, psw, nif, role_id, role_name)
VALUES ( :nome, :mail, :psw, :ni, :roleid, :rolen)";


$stmt = $db1->prepare($sql);
$stmt->bindValue('nome', $nome, PDO::PARAM_STR);
$stmt->bindValue('email', $mail, PDO::PARAM_STR);
$stmt->bindValue('psw', $psw, PDO::PARAM_STR);
$stmt->bindValue('nif', $ni, PDO::PARAM_INT);
$stmt->bindValue('role_id', $roleid, PDO::PARAM_INT);
$stmt->bindValue('role_name', $rolen, PDO::PARAM_STR);
$stmt->execute();

$error = $stmt->errorInfo();
print_r($error);

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

Массив ([0] => HY093 [1] => [2] =>)

  • 0
    «Для подготовленного оператора, использующего именованные заполнители, это будет имя параметра в форме: name. Для подготовленного оператора, использующего заполнители вопросительного знака, это будет позиция индекса с 1 индексом». Поэтому, пожалуйста, попробуйте изменить первые аргументы bindValue на «:». Также было бы неплохо увидеть структуру таблицы базы данных, чтобы убедиться, что вы не допустили ошибок с именами столбцов.
  • 1
    Возможная копия ошибки HY093 с запросом вставки PDO MySQL
Показать ещё 9 комментариев
Теги:
forms
pdo

1 ответ

0

Это решение вопроса, я не использовал одно и то же имя в функции bindValue()

$name = $_POST['name'];
$email = $_POST['email'];
$psw = $_POST['psw'];
$nif = $_POST['nif'];
$roleid = $row['id'];
$rolen = $row['nome'];

$sql = "INSERT INTO users ( nome, email, psw, nif, role_id, role_name)
        VALUES ( :name, :email, :psw, :nif, :roleid, :rolen)";

$stmt = $db1->prepare($sql);
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->bindValue(':email', $email, PDO::PARAM_STR);
$stmt->bindValue(':psw', $psw, PDO::PARAM_STR);
$stmt->bindValue(':nif', $nif, PDO::PARAM_INT);
$stmt->bindValue(':roleid', $roleid, PDO::PARAM_INT);
$stmt->bindValue(':rolen', $rolen, PDO::PARAM_STR);
$stmt->execute();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню