Я только недавно начал изучать базы данных в колледже в конце прошлого года и пытался узнать немного больше в свое время.
Мне посоветовали попробовать PostgreSQL на прошлой неделе и поразили кирпичную стену, пытаясь автоматически увеличивать идентификатор учетной записи до базы данных.PostgreSQL Auto Increment Вставить в PHP 7 Проблема
Система предназначена для автоматического добавления нового уникального идентификатора в таблицу учетных записей в строке «a_pid» при добавлении в форму POST электронной почты, имени пользователя и пароля.
Текущее сообщение об ошибке
Warning: pg_query(): Query failed: ERROR: column "email" does not exist LINE 1: ...NTO account (a_pid, email, username, pwd) VALUES ([email protected]^HINT: There is a column named "email" in table "account", but it cannot be referenced from this part of the query.
DDL
create table account (
a_pid serial primary key,
email varchar (64),
username varchar (16),
pwd varchar (32)
);
DDL Вставка данных
Insert into account (a_pid,email,username,pwd) values (0,'[email protected]','Zero','12345678');
Insert into account (a_pid,email,username,pwd) values (1,'[email protected]','One','password123');
Insert into account (a_pid,email,username,pwd) values (2,'[email protected]','Two','[email protected]');
Форма "index.php"
<form name="signup" action="sign-up.php" method="post">
Email <input name="email" type="text" maxlength="64" value="Please enter your email" onfocus="(this.value == 'Please enter your email') && (this.value = '')" onblur="(this.value == '') && (this.value = 'Please enter your email')"><br/>
Verify Email <input name="vf_email" type="text" maxlength="64" value="Please enter your email" onfocus="(this.value == 'Please enter your email') && (this.value = '')" onblur="(this.value == '') && (this.value = 'Please enter your email')"><br/>
Username: <input name="username" type="text" maxlength="16" value="username" onfocus="(this.value == 'username) && (this.value = '')" onblur="(this.value == '') && (this.value = 'username')"><br/>
Password: <input name="pwd" type="password" minlength="8" maxlength="32"><br/>
Password: <input name="vf_pwd" type="password" minlength="8" maxlength="32"><br/>
<input type="submit" value="Sign up">
</form>
PHP Вставить "знак-up.php"
<?php
$conn = "host=localhost port=5432 dbname=sql_account user=postgres password=databaseconnect";
$dbconn = pg_connect($conn);
$email = pg_escape_string($_POST['email']);
$username = pg_escape_string($_POST['username']);
$pwd = pg_escape_string($_POST['pwd']);
$query = "INSERT INTO account (a_pid, email, username, pwd) VALUES (". $email .", ". $username .", ". $pwd .");
SELECT currval(pg_get_serial_sequence('account','a_pid'))";
$result = pg_query($query);
?>
Проверьте сообщение, он говорит что-то не так близко к «)», и в 'Три, 123,),' вы можете видеть, что у вас есть одна дополнительная запятая после «123», но нет нового значения. Удалите это и повторите попытку – Acapulco
(1) Я считаю, что postgresql требует, чтобы строковые литералы цитировались, то есть '' email-0 @ example.com'', но вы не указали их в своем коде -> 'VALUES (". $ Email. ", ...' должно быть 'VALUES ('". $ email. "', ...'. (2) вы указываете 'a_pid' в своих столбцах' (a_pid, email, username, pwd) ', но не в ваши значения. Либо удалите его, либо добавьте «null» перед вашим письмом -> «VALUES (null, '». $ email. ", ...". (3) как было упомянуто, удалите последние ',' . (4) Я сомневаюсь, что 'pg_query()' разрешает несколько запросов, поэтому вам нужно будет удалить 'SELECT ...' – Sean
@Acapulco удалено 1 ошибка получена еще ... Предупреждение: pg_query(): запрос не выполнен: ERROR : столбец «email» не существует. LINE 1: ... учетная запись NTO (a_pid, email, username, pwd). VALUES (email-3 @ ex ...^ СОВЕТ. В таблице «учетная запись» есть столбец с именем «email», но на эту ссылку нельзя ссылаться. –