私は最近、昨年末の大学のデータベースについて学び始めたばかりで、私自身の時間にもう少し学びたいと思っています。
私は先週PostgreSQLを試し、データベースにアカウントIDを自動的にインクリメントしようとするとレンガの壁にぶつかったことをお勧めしました。PostgreSQL自動インクリメントPHP 7で挿入問題
システムは、フォームのPOSTの電子メール、ユーザー名とパスワードに加えながら、自動的に行のアカウントテーブルに「a_pid」を新たにユニークなIDを追加するためのものです。
現在のエラーメッセージ
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);
?>
がメッセージを確認し、それが何か「)」の近くに間違っていると言い、そして 'Three、123、);では' 123 'の後にカンマが1つ追加されていることがわかりますが、新しい値はありません。それを削除して、もう一度やり直してください。 – Acapulco
(1)postgresqlでは、文字列リテラルを引用符で囲む必要があると思いますが、 '' email-0 @ example.com ''のように引用していますが、コードには '' VALUES( "。 "、..."はあなたの '(a_pid、email、username、pwd)'列に 'a_pid'を指定しますが、あなたの値を削除するか、あなたの電子メールの前に 'null 'を追加する - >' VALUES(null、' "。$ email。" '、... '。(3) 。pg_query()::(4)私は( 'pg_queryを疑う)あなたは' SELECTを削除する必要がありますので、 '、マルチクエリを可能に...' – Sean
@Acapulcoは1つのエラーを取り除くには、別の... 警告を得たクエリに失敗しました:ERRORを:column "email"は存在しませんLINE 1:... NTOアカウント(a_pid、email、username、pwd)VALUES(email-3 @ ex ...^ヒント: "account"という表に "email"という名前の列がありますが、この部分から照会することはできません。 –