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

Posted

技术标签:

【中文标题】MySQL 函数 Create Table 给了我一个语法错误【英文标题】:MySQL function Create Table gives me a Syntax error 【发布时间】:2013-01-22 12:19:34 【问题描述】:

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

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 ,“名称”VARCHAR(128)NOT NULL,“电子邮件”VARCHAR(64 ) NOT NULL , 'phone_number' VARCHAR( 16 ) NOT NULL , '用户名' VARCHAR( 16 ) NOT NULL , '密码' VARCHAR( 32 ) NOT NULL , 'confirmcode' VARCHAR(32) , PRIMARY KEY ('id') ) mysqlerror: 你有 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在 '( 'id' INT NOT 附近使用正确的语法 NULL AUTO_INCREMENT , 'name' VARC' 在第 1 行

所以很明显那行有语法错误,但由于我没有 php 经验,所以我看不出错误在哪里!

非常感谢任何帮助!

【问题讨论】:

什么是 $this->tablename?从错误输出中,我猜它是空的.. 我不确定,但在函数 Create Table 上面我有这行代码: function Ensuretable() $result = mysql_query("SHOW COLUMNS FROM $this->tablename"); if(!$result || mysql_num_rows($result) CreateTable(); 返回真; B.T.W.对于新代码,最好使用 MYSQLI 或 PDO 库而不是 MYSQL 库。 MYSQL_ 函数将从 PHP 5.5 版开始贬值。 【参考方案1】:

您使用的是引号而不是反引号。是的,似乎没有将标签名称传递给函数。你的函数应该看起来更像这样:

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;

【讨论】:

字段名称在引用时应使用反引号,而不是单引号 - 单引号用于划分数据。但是 SQL 失败,因为表名是空白的 @user1746391 - 反勾号是撇号的向前倾斜版本。不要在平板电脑键盘上使用它,很快就会从另一个答案中复制出来,与此同时,请参阅我的答案,了解一种在没有反引号的情况下运行函数的方法,并填写表格名称。 Windows 中的快捷键是 ALT + 96。按住 alt 键输入 96。meta.stackexchange.com/questions/61235/… 。在我的美国 QWERTY 键盘上,它位于 1 的左侧。 您好 Perception,我复制了您的带有反引号的代码,顺便感谢您将它粘贴到那里!但是,仍然有语法错误消息! @Mr.Radical - 请记住这一点,也许有一天会派上用场。不过,这款平板电脑没有 alt 键,所以今天没有!【参考方案2】:

做一些类似的事情:

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;

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

【讨论】:

【参考方案3】:

这里没有表名

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

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于MySQL 函数 Create Table 给了我一个语法错误的主要内容,如果未能解决你的问题,请参考以下文章

好吧,我有一个关于 MySql 中的递归的问题,关于创建递归阶乘函数。它给了我错误1424:

Node.js 和 mysql 未定义函数

无法连接:MySQL Connector/J 给了我一个奇怪的异常

内部连接与 MySQL 的区别

MySQL create table as与create table like对比

MySQL create table as与create table like对比