Количество столбцов не соответствует значению в строке 1. Не могу понять как исправить
Всем привет! Помогите исправить ошибку: "Количество столбцов не соответствует значению в строке 1". Первый столбец в базе это user_id. я думаю что из - за него. Но там у меня стоит AUTO_INCREMENT PRIMARY KEY
$insert_sql = "INSERT INTO users (first_name, last_name, email, vk_url, facebook_url, twitter_url) " .
"VALUES ('{$first_name}, {$last_name}, {$email}, {$vk_url}, {$facebook_url}, {$twitter_url}');";
//Вставка пользователя в базу
mysqli_query($link, $insert_sql)
or die(mysqli_error($link));
Ответы (4 шт):
ок, а вот так подойдёт?
$insert_sql = "INSERT INTO users (first_name, last_name, email, vk_url, facebook_url, twitter_url) VALUES ('$first_name', '$last_name', '$email', '$vk_url', '$facebook_url', '$twitter_url')";
Используй библиотеку redbean для упрощенной работы с базой данных. Ниже пример работы
$mysql_сonnect = "mysql:host={$host}; dbname={$db_name}";
R::setup($mysql_сonnect, $cfg->login, $cfg->password);
$user = R::dispense('users');
$user->first_name = $first_name;
$user->last_name = $last_name;
$user->email = $email;
$user->vk_url = $vk_url;
$user->facebook_url = $facebook_url;
$user->twitter_url = $twitter_url;
R::store($user);
При выполнении этого кода
$insert_sql = "INSERT INTO users (first_name, last_name, email, vk_url, facebook_url, twitter_url) " .
"VALUES ('{$first_name}, {$last_name}, {$email}, {$vk_url}, {$facebook_url}, {$twitter_url}');";
вы получите строку такого вида
INSERT INTO users (first_name, last_name, email, vk_url, facebook_url, twitter_url)
VALUES ('first_name, last_name, email, vk_url, facebook_url, twitter_url');
т.е. в VALUES у вас передается одна длинная строка.
Вам же нужно получить такой SQL
INSERT INTO users (first_name, last_name, email, vk_url, facebook_url, twitter_url)
VALUES ('first_name', 'last_name', 'email', 'vk_url', 'facebook_url', 'twitter_url');
Для этого можно было бы использовать такой код
$insert_sql = "INSERT INTO users (first_name, last_name, email, vk_url, facebook_url, twitter_url) " .
"VALUES ('{$first_name}', '{$last_name}', '{$email}', '{$vk_url}', '{$facebook_url}', '{$twitter_url}');";
но тогда все равно нужно контролировать, чтобы ' не оказался внутри параметра, писать дополнительный код по экранированию специальных символов и т.д.
Поэтому лучше всего сразу перейти на prepared statements и забыть об этой проблеме раз и навсегда.
Что для этого использовать mysqli или PDO решайте сами
Проблема решена. Запрос сделал неверный.Всем спасибо! Вот правильный:
$insert_sql = "INSERT INTO users (first_name, last_name, email, vk_url, facebook_url, twitter_url) VALUES ('$first_name', '$last_name', '$email', '$vk_url', '$facebook_url', '$twitter_url')";