Задать вопрос
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: /');
  • Вопрос задан
  • 79 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 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)'
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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