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:
无法连接:MySQL Connector/J 给了我一个奇怪的异常