0

ログインフォームを作成し、データベースを作成し、次の関数でテーブルを作成しています:

function CreateTable()
{
    $qry = "CREATE TABLE $this->tablename (
            'id' INT NOT NULL AUTO_INCREMENT ,
            'name' VARCHAR( 128 ) NOT NULL ,
            'email' VARCHAR( 64 ) NOT NULL ,
            'phone_number' VARCHAR( 16 ) NOT NULL ,
            'username' VARCHAR( 16 ) NOT NULL ,
            'password' VARCHAR( 32 ) NOT NULL ,
            'confirmcode' VARCHAR(32) ,
            PRIMARY KEY ('id')
            )";

    if(!mysql_query($qry,$this->connection))
    {
        $this->HandleDBError("Error creating the table \nquery was\n $qry");
        return false;
    }
    return true;
}

問題は、フォームをテストするためにログインしようとするたびに、次のエラーが発生することです。

テーブル クエリの作成中にエラーが発生しました CREATE TABLE ( 'id' INT NOT NULL AUTO_INCREMENT , 'name' VARCHAR( 128 ) NOT NULL , 'email' VARCHAR( 64 ) NOT NULL , 'phone_number' VARCHAR( 16 ) NOT NULL , 'username' VARCHAR( 16 ) NOT NULL , 'password' VARCHAR( 32 ) NOT NULL , 'confirmcode' VARCHAR(32) , PRIMARY KEY ('id') ) mysqlerror:SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の '( 'id' INT NOT NULL AUTO_INCREMENT , 'name' VARC' の近くで使用する正しい構文を確認してください。

したがって、明らかにその行に構文エラーがありますが、私は PHP の経験がないので、エラーがどこにあるのかわかりません!

どんな助けでも大歓迎です!

4

5 に答える 5

2

バックティックの代わりに引用符を使用しています。そして、ええ、それが見える関数に渡されるタブ名はありません。関数は次のようになります。

function CreateTable($tableName)
{
    $qry = "CREATE TABLE IF NOT EXISTS $tableName (
            `id` INT NOT NULL AUTO_INCREMENT ,
            `name` VARCHAR( 128 ) NOT NULL ,
            `email` VARCHAR( 64 ) NOT NULL ,
            `phone_number` VARCHAR( 16 ) NOT NULL ,
            `username` VARCHAR( 16 ) NOT NULL ,
            `password` VARCHAR( 32 ) NOT NULL ,
            `confirmcode` VARCHAR(32) ,
            PRIMARY KEY (`id`)
            );";

    if(!mysql_query($qry,$this->connection))
    {
        $this->HandleDBError("Error creating the table \nquery was\n $qry");
        return false;
    }
    return true;
}
于 2013-01-22T12:22:37.807 に答える
1

次のようなことをします:

function Insert($tableName)
{
$tableName = newtable;
$insert_query = "insert into $tableName( name, email, username, password, confirmcode ) values ("bob", "bobsemailadress@hotmail.com", 911, "bob2013", "secrete", "1");";


    if(!mysql_query($qry,$this->connection))
    {
        $this->HandleDBError("Error inserting into the table \nquery was\n $qry");
        return false;
    }
    return true;
}

挿入にどのコードを使用したかわからないので、いくつかの仮定をしました。さらに、それは基本的に別の質問です。

于 2013-01-22T13:38:30.070 に答える
0

テーブル名はここに来ていません

CREATE TABLE ( 'id' INT NOT NULL AUTO_INCREMENT , 'name' VARCHAR( 128 ) NOT NULL , 'email' VARCHAR( 64 ) NOT NULL , 'phone_number' VARCHAR( 16 ) NOT NULL , 'username' VARCHAR( 16 ) NOT NULL , 'password' VARCHAR( 32 ) NOT NULL , 'confirmcode' VARCHAR(32) , PRIMARY KEY ('id') )

それは次のようなものでなければなりません

CREATE TABLE `table` ( 'id' INT NOT NULL AUTO_INCREMENT , 'name' VARCHAR( 128 ) NOT NULL , 'email' VARCHAR( 64 ) NOT NULL , 'phone_number' VARCHAR( 16 ) NOT NULL , 'username' VARCHAR( 16 ) NOT NULL , 'password' VARCHAR( 32 ) NOT NULL , 'confirmcode' VARCHAR(32) , PRIMARY KEY ('id') )

だからあなたの$this->tablename

于 2013-01-22T12:22:39.107 に答える
0

$this->tablenameかっこで囲んでみてください。

$qry = "CREATE TABLE {$this->tablename} ( ... )";

さらに、単一引用符を使用してフィールド名を引用することはできません (これらは通常、SQL の文字列を引用します)。代わりにバッククォート (`) を使用する必要があります。

于 2013-01-22T12:23:51.923 に答える
0

HeidiSql を使用してデータベースを作成し、フォームに接続してみませんか???? それははるかに簡単です。また、heidi を使用すると、データベースにデータを挿入、更新、および削除するための間違った php コードを記述しない限り、SQL エラーは発生しません。

于 2013-01-22T12:29:06.250 に答える