繁体   English   中英

MySQL函数创建表给我一个语法错误

[英]MySQL function Create Table gives me a Syntax error

我正在创建一个登录表单,创建了数据库,现在正在使用此功能创建表:

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,'用户名' 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的经验,所以我看不到错误在哪里!

任何帮助都非常感谢!

您使用的是引号,而不是反引号。 是的,似乎没有将Tabe名称传递到该函数中。 您的函数应如下所示:

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;
}

做类似的事情:

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;
}

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

表名不在这里

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM