Ошибка при ч INSERT через PDO - PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

Осваиваю PDO и вообще работу с базами данных Сейчас при инсерте в БД - выбивает ошибку PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

код максимально простой, но понять - где ошибка я не в упор не могу. Получить данные с таблицы я могу, то есть подключение к базе есть, данные выводит, не работает конкретно инсерт, сама таблица максимально проста - айдишник, который автоинкремент и данные, все. Поэтому почему параметр не определен не понятно

  $task = $_POST['task'];
if (!isset($task)) {
    echo 'Введите само задание';
    exit();
}

$dbh = new \PDO('mysql:host=a_level_nix_mysql;dbname=to-do', 'root', 'cbece_gead-cebfa');


//
//$getdataFromToDo = $dbh->prepare('SELECT * FROM tasks');
//$getdataFromToDo->execute();

//$addTask = $dbh->prepare('INSERT INTO `tasks` (to-do_task) VALUES (:to-do_task)');
$addTask = $dbh->prepare('INSERT INTO `tasks` (`to-do_task`) VALUES (:to-do_task)');
$addTask->bindParam('to-do_task', $task, PDO::PARAM_STR, 255);
$addTask->execute(['to-do_task' => $task]);


Не работает так

$addTask = $dbh->prepare('INSERT INTO tasks (to-do_task) VALUES (:to-do_task)'); $addTask->bindParam('to-do_task', $task, PDO::PARAM_STR, 255); $addTask->execute();

так тоже не работает

$addTask = $dbh->prepare('INSERT INTO `tasks` (`to-do_task`) VALUES (:to-do_task)');
//$addTask->bindParam('to-do_task', $task, PDO::PARAM_STR, 255);
$addTask->execute( ['to-do_task' => $task]);

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

Автор решения: Алексей Шиманский

В вашем случае правильно будет так:

$addTask->execute();

Потому что уже произведена связка параметра и значения через bindParam

Нужно понимать, что если была сделана привязка через bindParam, то в execute не нужно ничего вставлять и наоборот, если было решено параметры биндить через execute, то bindParam не нужен в принципе

→ Ссылка