需要数据库帮助我很难过

时间:2016-02-04 03:45:29

标签: php codeigniter mysqli

我最近在遵循安装说明后下载了一些使用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', '');

现在的问题是当我再次添加数据库时,它说有一个语法错误并且它不会添加新行,我在这里做错了什么?

在底部我还将它们插入代码中,我是否需要将它们或其中任何一个移动到主键,唯一键或键行?

1 个答案:

答案 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_usersbannedblock_non_pgpentry_paidforce_pgp_messageslocationlogin_time,{{1 }},display_login_timepasswordpublic_keyprivate_keyprivate_key_saltregister_timesaltpgp_two_factoruser_hashuser_nameuser_rolelocal_currencycompleted_order_counttotp_two_factortotp_secretactivation_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

如果出现语法错误,请仔细检查语法。这很简单。