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

你为什么不直接使用 HeidiSql 创建你的数据库,然后连接你的表单????这要容易得多。并且当使用 heidi 时,你不会得到任何 sql 错误,除非你编写了错误的 php 代码来插入、更新和删除数据库中的数据。

于 2013-01-22T12:29:06.250 回答
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 回答