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

Php MySQL函数Create Table给了我一个语法错误,php,mysql,database,create-table,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 ,

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

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;
}
问题是,每次尝试登录以测试表单时,都会出现以下错误:

创建表查询时出错:创建表('id'INT不为NULL 自动递增,'name'VARCHAR(128)不为空,'email'VARCHAR(64 )不为空,“电话号码”VARCHAR(16)不为空,“用户名” VARCHAR(16)不为空,“密码”VARCHAR(32)不为空, “confirmcode”VARCHAR(32),主键('id'))mysqlerror:您有 SQL语法中的错误;检查与您的产品相对应的手册 MySQL服务器版本,以便在“(“id”INT NOT)附近使用正确的语法 空自动增量,'name'VARC'位于第1行

很明显,这一行有语法错误,但由于我没有PHP方面的经验,我就是看不出错误在哪里


非常感谢您的帮助!

您使用的是引号,而不是反勾号。是的,似乎没有选项卡名称被传递到函数中。您的函数应该更像这样:

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

您使用的是引号而不是反勾号。是的,似乎没有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;
}

这里没有表名

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

表名是否不在此处

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中,这些字段名通常引用字符串)。您应该改用倒勾(`)。

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

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

此外,不能使用单引号引用字段名(在SQL中,这些字段名通常引用字符串)相反。

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

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

执行以下操作:

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;
}
我不知道您在插入时使用了哪种代码,所以我做了一些假设。此外,这基本上是另一个问题。

执行以下操作:

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

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

什么是$this->tablename?从错误输出中,我猜它是空的。.我不确定,但在函数Create Table上方我有一行代码:function Ensuretable(){$result=mysql\u query(“显示来自$this->tablename“;if(!$result | | mysql_num_rows($result)CreateTable()}的列”return true;}B.T.W.对于新代码,可能最好使用MYSQLI或PDO库而不是MYSQL库。MYSQL_u函数将从PHP 5.5版开始贬值。什么是$this->tablename?从错误输出来看,我猜它是空的。.我不确定,但在函数Create表上方,我有一行代码:func操作可确保(){$result=mysql_查询(“显示来自$this->tablename的列”);如果(!$result | | mysql_num_rows($result)CreateTable()}return true;}B.T.W.对于新代码,可能最好使用MYSQLI或PDO库而不是MYSQL库。MYSQL_uu函数将从PHP 5.5版开始贬值。字段名在引用时应使用反勾号,而不是单引号-单引号用于标定数据。但是SQL失败,因为艾娜是blank@user1746391-后勾号是撇号的前倾版本。平板电脑键盘上没有,我很快会从另一个答案中复制,同时,请参阅我的答案,以了解无后勾号运行函数的方法,并填写表格名称。windows中的短键为ALT+96。按住ALT键键入96。在我的美国QWERTY键盘上,它是1留下的。嗨,Perception,我用背面的记号复制了你的代码,谢谢你帮我粘贴在那里!但是,仍然有一条语法错误消息!@Mr.Radical-我会记住这一点,也许有一天会派上用场。不过,这款平板电脑没有alt键,所以今天不会!引用字段名时,should使用反勾号,而不是单引号-单引号用于标定数据。但是SQL失败,因为表名为blank@user1746391-后面的勾号是撇号的前向倾斜版本。平板电脑键盘上没有,我很快会从另一个答案复制过来,同时,请参阅我的答案,了解运行函数的方法在没有回勾的情况下打开,并填写表格名称。windows中的短键为ALT+96。按住ALT键并键入96。在我的美国QWERTY键盘上,它是从1开始的。嗨,Perception,我用回勾复制了你的代码,谢谢你帮我粘贴到那里!但是,仍然有一条语法错误消息!@Mr.Radical-我将其保留在m中ind,也许有一天会派上用场。不过这款平板电脑没有alt键,所以今天不行!