Задать вопрос
kirashoo42
@kirashoo42

Как добавить в базу данных несколько записей?

Хочу записать в базу данных nickname и email, но выводит ошибку:

PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in

Если записываю только nickname, то все отлично работает, а вместе с email ошибка, в чем проблема?

$nickname = $_POST['nickname'];
	$email = $_POST['email'];
	if($nickname == '') {
		echo 'введите nickname';
		exit();
	}
	if($email == '') {
		echo 'введите email';
		exit();
	}
	$dsn = 'mysql:host=localhost;dbname=person_id';
	$pdo = new PDO($dsn, 'root', '');
	$sql = 'INSERT INTO users(nickname, email) VALUES(:nickname, email)';
	$query = $pdo->prepare($sql);
	$query->execute(['nickname', 'email' => $nickname, $email]);
	header('Location: /');
  • Вопрос задан
  • 81 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
В должен передаваться массив в котором количество значений соответствует количеству заполнителей (в Вашем случае 2):
$sql = 'INSERT INTO users(nickname, email) VALUES(:nickname, :email)';
  $query = $pdo->prepare($sql);
  $query->execute([':nickname'=> $nickname, ':email' => $email]);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@MikUrrey
Ошибка в строке
$query->execute(['nickname', 'email' => $nickname, $email]);

вероятно, должно быть так
$query->execute(['nickname' => $nickname, 'email' => $email]);

и еще,
'VALUES(:nickname, email)'
должно быть так:
'VALUES(:nickname, :email)'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы