Похоже, вы совершили довольно простую ошибку:
$sql = "INSERT into ec_account values ('nextval('ec_account_id')','$nome','$hashedPass','$email','$telemovel') ";
Обратите внимание на вашу постороннюю одинарную кавычку перед следующим. Удалите это и закрывающий, который вы добавили, и все должно быть в порядке.
$sql = "INSERT into ec_account values (nextval('ec_account_id'),'$nome','$hashedPass','$email','$telemovel') ";
Просто для пояснения, SQL нужны кавычки вокруг строковых значений. Вам не нужно произвольно добавлять кавычки вокруг каждой передаваемой переменной.
Еще одно уточнение о Postgresql: когда вы определяете столбец как тип «serial», Postgresql создает для вас последовательность с именем tablename_columname_seq
. Таким образом, вы избыточно создали последовательность, когда вы могли бы использовать nextval('ec_account_id_seq')
и вам не нужно создавать последовательность ec_account_id.
Когда вы создаете оператор вставки, вам следует избегать использования сокращенного метода и явно перечислять столбцы. Это позволяет избежать проблем позже, если вам нужно будет выполнить вставку, которая не включает все столбцы, или если вы добавите столбец в таблицу, который нарушит ваши существующие операторы вставки.
Исправлено:
$sql = "INSERT into ec_account ('id', 'name', 'password', 'email', 'phone')
values (nextval('ec_account_id'),'$nome','$hashedPass','$email','$telemovel')";
Последнее слово об SQL-инъекциях, экранировании и параметрах:
Этот метод использования строк PHP для интерполяции значений подвержен многочисленным проблемам и создает уязвимости в вашей системе.
Я не знаю, используете ли вы pg api или PDO, но в любом случае вам следует использовать параметры для отправки ваших значений.
Вот ссылка на страницу pg_query_params , которая объясняет это.
Я бы порекомендовал лично использовать PDO .