Количество столбцов не соответствует значению в строке 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 шт):

Автор решения: openman2077 error

ок, а вот так подойдёт?

$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);
→ Ссылка
Автор решения: Anton Shchyrov

При выполнении этого кода

$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')";

→ Ссылка