MySQL函数Create Table给我一个语法错误

时间:2013-01-22 12:19:35

标签: php mysql database create-table

我正在创建一个登录表单,我创建了数据库,现在我正在用这个函数创建表:

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服务器版本,用于在'('id'INT NOT)附近使用正确的语法   NULL AUTO_INCREMENT,第1行的'name'VARC'

很明显,该行有语法错误,但由于我没有PHP经验,所以我无法看到错误的位置!

非常感谢任何帮助!

5 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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;
}

我不知道您使用哪个代码插入,所以我做了一些假设。此外,这基本上是另一个问题。

答案 2 :(得分: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

答案 3 :(得分:0)

尝试用括号括起$this->tablename,即

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

此外,您不能使用单引号引用字段名称(这些通常在SQL中引用字符串)。你应该使用反引号(`)。

答案 4 :(得分:0)

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