我最近在遵循安装说明后下载了一些使用codeigniter框架制作的软件,我在localhost上运行了网站,该网站加载但是一旦我注册了新成员,它就会给我以下错误。我对这一切都是全新的,所以对你来说看似微不足道的事情可能不会让我只是抬头。
错误号码:1054'字段列表'中的未知列'activation_hash' INSERT INTO`bw_users`(`password`,`location`,`register_time`, `salt`,`activation_hash`,`activation_id`,`email_address`, `email_activated`,`user_hash`,`user_name`,`user_role`, `public_key`,`private_key`,`private_key_salt`,`wallet_salt`, `local_currency`)VALUES $ 2a $ 10 $ 51GaLf4o644Rb / FxR8Os9enxWuop1V.haISOHzinT1Tq674.5SaXm','224', 1454533259,'$ 2a $ 10 $ 51GaLf4o644Rb / FxR8Os9hA2gGDxVQ ==', 'f0a57fb24bcda7bd87e26bc9bafb71ee','ae7522de65812b','','1', '2eb1a2c0b086bf044a80',
文件名:models / Users_model.php
行号:37
我提取了Users_model第37行及其周围的代码
public function add($data, $token_info = NULL)
{
$ret = $this->db->insert('users', $data) == TRUE; <<<<<<<< This is line 37
if ($token_info !== null)
$this->delete_registration_token($token_info['id']);
return $ret;
}
然后我检查了其余代码的activation_hash,我唯一可以看到它位于users_model.php的底部,如下所示。
public function attempt_email_activation($identifier, $subject, $activation_hash)
{
$q = $this->db->select('id, email_activated')->get_where('users', array($identifier => $subject, 'activation_hash' => $activation_hash));
if ($q->num_rows() > 0) {
$row = $q->row_array();
if ($row['email_activated'] == '1') {
return 'activated';
} else {
$this->_set_activated_email($row['id']);
return TRUE;
}
}
return FALSE;
}
这是我的sql数据库的bw_users部分,如果需要,我可以发布整个数据库转储。
CREATE TABLE IF NOT EXISTS `bw_users` (
`id` int(9) NOT NULL AUTO_INCREMENT,
`banned` enum('0','1') DEFAULT '0',
`block_non_pgp` enum('0','1') DEFAULT '0',
`entry_paid` enum('0','1') DEFAULT '0',
`force_pgp_messages` enum('0','1') DEFAULT '0',
`location` int(3) NOT NULL,
`login_time` int(20) NOT NULL,
`display_login_time` enum('0','1') DEFAULT '0',
`password` varchar(128) NOT NULL,
`public_key` blob NOT NULL,
`private_key` blob NOT NULL,
`private_key_salt` varchar(64) NOT NULL,
`register_time` int(20) NOT NULL,
`salt` varchar(128) NOT NULL,
`wallet_salt` varchar(128) NOT NULL,
`user_hash` varchar(25) NOT NULL,
`user_name` varchar(40) NOT NULL,
`user_role` enum('Buyer','Vendor','Admin') NOT NULL,
`local_currency` int(11) NOT NULL,
`completed_order_count` int(9) DEFAULT '0',
`totp_secret` varchar(25),
`totp_two_factor` enum('0','1') DEFAULT '0',
`pgp_two_factor` enum('0','1') DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `user_hash` (`user_hash`,`user_name`),
KEY `user_name` (`user_name`,`user_hash`,`banned`,`entry_paid`,`register_time`,`user_role`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `bw_users` (`banned`, `block_non_pgp`, `entry_paid`, `force_pgp_messages`, `location`, `login_time`, `display_login_time`, `password`, `public_key`, `private_key`, `private_key_salt`, `register_time`, `salt`, `pgp_two_factor`, `user_hash`, `user_name`, `user_role`, `local_currency`, `completed_order_count`, `totp_two_factor`, `totp_secret`) VALUES
('0', '0', '1', '0', 1, 0, '0', '%PASSWORD%', '%PUBLIC_KEY%', '%PRIVATE_KEY%', '%PRIVATE_KEY_SALT%', '%REGISTER_TIME%', '%SALT%', '0', '%USER_HASH%', 'admin', 'Admin', 0, 0, '0', '');
有人可以告诉我我需要做什么,删除此错误并能够注册用户,我一直试图弄清楚这一天,这让我发疯。谢谢你的帮助。
编辑----------------------------------------
感谢您到目前为止的回复,我已根据@VũTuấnAnh提供的信息对表格进行了如下修改
ALTER TABLE bw_users
添加栏activation_hash
VARCHAR(128),
添加栏activation_id
VARCHAR(128),
添加栏email_address
VARCHAR(64),
添加栏email_activated
SMALLINT(4);
CREATE TABLE IF NOT EXISTS `bw_users` (
`id` int(9) NOT NULL AUTO_INCREMENT,
`banned` enum('0','1') DEFAULT '0',
`block_non_pgp` enum('0','1') DEFAULT '0',
`entry_paid` enum('0','1') DEFAULT '0',
`force_pgp_messages` enum('0','1') DEFAULT '0',
`location` int(3) NOT NULL,
`login_time` int(20) NOT NULL,
`display_login_time` enum('0','1') DEFAULT '0',
`password` varchar(128) NOT NULL,
`public_key` blob NOT NULL,
`private_key` blob NOT NULL,
`private_key_salt` varchar(64) NOT NULL,
`register_time` int(20) NOT NULL,
`salt` varchar(128) NOT NULL,
`wallet_salt` varchar(128) NOT NULL,
`user_hash` varchar(25) NOT NULL,
`user_name` varchar(40) NOT NULL,
`user_role` enum('Buyer','Vendor','Admin') NOT NULL,
`local_currency` int(11) NOT NULL,
`completed_order_count` int(9) DEFAULT '0',
`totp_secret` varchar(25),
`totp_two_factor` enum('0','1') DEFAULT '0',
`pgp_two_factor` enum('0','1') DEFAULT '0',
'activation_hash' varchar(128),
'activation_id' varchar(128),
'email address' varchar(64),
'email_activated' smallint(4),
PRIMARY KEY (`id`),
UNIQUE KEY `user_hash` (`user_hash`,`user_name`),
KEY `user_name` (`user_name`,`user_hash`,`banned`,`entry_paid`,`register_time`,`user_role`, 'activation_has', 'activation_id', 'email_address', 'email_activated')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `bw_users` (`banned`, `block_non_pgp`, `entry_paid`, `force_pgp_messages`, `location`, `login_time`, `display_login_time`, `password`, `public_key`, `private_key`, `private_key_salt`, `register_time`, `salt`, `pgp_two_factor`, `user_hash`, `user_name`, `user_role`, `local_currency`, `completed_order_count`, `totp_two_factor`, `totp_secret`, 'activation_hash', 'activation_id', 'email_address', 'email_activated') VALUES
('0', '0', '1', '0', 1, 0, '0', '%PASSWORD%', '%PUBLIC_KEY%', '%PRIVATE_KEY%', '%PRIVATE_KEY_SALT%', '%REGISTER_TIME%', '%SALT%', '0', '%USER_HASH%', 'admin', 'Admin', 0, 0, '0', '');
现在的问题是当我再次添加数据库时,它说有一个语法错误并且它不会添加新行,我在这里做错了什么?
在底部我还将它们插入代码中,我是否需要将它们或其中任何一个移动到主键,唯一键或键行?
答案 0 :(得分:2)
使用以下命令修改表格:
ALTER TABLE bw_users
ADD COLUMN `activation_hash` VARCHAR(128),
ADD COLUMN `activation_id` VARCHAR(128),
ADD COLUMN `email_address` VARCHAR(64),
ADD COLUMN `email_activated` SMALLINT(4);
更新问题后的编辑答案:
使用'
字符时,您的sql insert语句出现基本错误。请使用`as bellow:
INSERT INTO bw_users
(banned
,block_non_pgp
,entry_paid
,force_pgp_messages
,location
,login_time
,{{1 }},display_login_time
,password
,public_key
,private_key
,private_key_salt
,register_time
,salt
,pgp_two_factor
,user_hash
,user_name
,user_role
,local_currency
,completed_order_count
,totp_two_factor
,totp_secret
,activation_hash
,{ {1}},activation_id
)价值观
(&#39; 0&#39;,&#39; 0&#39;,&#39; 1&#39;,&#39; 0&#39;,1,0,&#39; 0&#39;, &#39;%PASSWORD%&#39;,&#39;%PUBLIC_KEY%&#39;,&#39;%PRIVATE_KEY%&#39;,&#39;%PRIVATE_KEY_SALT%&#39;,&# 39;%REGISTER_TIME%&#39;,&#39;%SALT%&#39;,&#39; 0&#39;,&#39;%USER_HASH%&#39;,&#39; admin&#39 ;,&#39;管理员&#39;,0,0,&#39; 0&#39;,&#39;&#39;);
更多细节: 你老了:
email_address
如果出现语法错误,请仔细检查语法。这很简单。