我正在创建一个登录表单,我创建了数据库,现在我正在用这个函数创建表:
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经验,所以我无法看到错误的位置!
非常感谢任何帮助!
答案 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错误。