CodeIgniter:'字段列表'中的未知列'xxx'

时间:2010-01-25 04:34:41

标签: codeigniter insert mysql-error-1054

这是我导出的BD表:

CREATE TABLE `hta_users` (
  `id` int(11) NOT NULL auto_increment,
  `nombre` varchar(100) collate utf8_spanish_ci NOT NULL,
  `apellidos` varchar(255) collate utf8_spanish_ci NOT NULL,
  `nif` varchar(10) collate utf8_spanish_ci NOT NULL,
  `direccion` varchar(255) collate utf8_spanish_ci NOT NULL,
  `cp` varchar(5) collate utf8_spanish_ci NOT NULL,
  `poblacion` varchar(255) collate utf8_spanish_ci NOT NULL,
  `provincia` int(2) NOT NULL,
  `telefono` varchar(9) collate utf8_spanish_ci NOT NULL,
  `edad` int(3) NOT NULL,
  `retribucion` int(1) NOT NULL,
  `entidad` varchar(4) collate utf8_spanish_ci NOT NULL,
  `oficina` varchar(4) collate utf8_spanish_ci NOT NULL,
  `dc` varchar(2) collate utf8_spanish_ci NOT NULL,
  `cc` varchar(10) collate utf8_spanish_ci NOT NULL,
  `centro` varchar(255) collate utf8_spanish_ci NOT NULL,
  `email` varchar(255) collate utf8_spanish_ci NOT NULL,
  `especialidad` int(2) NOT NULL,
  `parent` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `nif` (`nif`,`email`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=1 ;

这是我的模特功能:

function add_user( $nombre, $apellidos, $nif, $direccion, $cp, $poblacion, $provincia, $telefono, $edad, $retribucion, $cc_entidad, $cc_oficina, $cc_dc, $cc_cc, $centro, $email, $especialidad, $parent )
{
    $tbl = $this->db->dbprefix('users');

    if( $retribucion == 1 )
    {
        $sql = array(
            'nombre' => $nombre,
            'apellidos' => $apellidos,
            'nif' => $nif,
            'direccion' => $this->db->escape($direccion),
            'cp' => $cp,
            'poblacion' => $poblacion,
            'provincia' => $provincia,
            'telefono' => $telefono,
            'edad' => $edad,
            'retribucion' => $retribucion,
            'entidad' => $cc_entidad,
            'oficina' => $cc_oficina,
            'dc' => $cc_dc,
            'cc' => $cc_cc,
            'centro' => $centro,
            'email' => $email,
            'especialidad' => $especialidad,
            'parent' => $parent
        );
    }
    else
    {
        $sql = array(
            'nombre' => $nombre,
            'apellidos' => $apellidos,
            'nif' => $nif,
            'direccion' => $this->db->escape($direccion),
            'cp' => $cp,
            'poblacion' => $poblacion,
            'provincia' => $provincia,
            'telefono' => $telefono,
            'edad' => $edad,
            'retribucion' => $retribucion,
            'centro' => $centro,
            'email' => $email,
            'especialidad' => $especialidad,
            'parent' => $parent
        );
    }

    $this->db->insert($tbl, $sql); 

    if( $this->db->affected_rows() == 0 ) return false;
    else return true;
}

这是我的控制器代码:

if( $this->users->add_user($nombre, $apellidos, $nif, $direccion, $cp, $poblacion, $provincia, $telefono, $edad, $retribucion, $cc_entidad, $cc_oficina, $cc_dc, $cc_cc, $centro, $email, $especialidad, $parent) )
{
    $data['form_error'] = 'Se ha añadido al usuario.';

    $data['module'] = 'registro';
    $this->load->view('template', $data);
}
else
{
    $data['form_error'] = 'Se ha producido un error al agregar al usuario a la BD.';

    $data['module'] = 'registro';
    $this->load->view('template', $data);
}

这就是我得到的错误:

A Database Error Occurred

Error Number: 1054

Unknown column 'entidad' in 'field list'

INSERT INTO `hta_users` (`nombre`, `apellidos`, `nif`, `direccion`, `cp`, `poblacion`, `provincia`, `telefono`, `edad`, `retribucion`, `entidad`, `oficina`, `dc`, `cc`, `centro`, `email`, `especialidad`, `parent`) VALUES ('nombre', 'apellidos', '12345678Q', '\'elm st 666\'', '08008', 'Barcelona', '1', '666555666', '2', 1, '9999', '9999', '99', '9999999999', 'home', 'email@domain.com', '1', '0')

有人可以帮忙吗?我不知道发生了什么,也不知道为什么......:/

2 个答案:

答案 0 :(得分:2)

以下是我撰写的一篇文章,可以帮助您debugging CodeIgniter ActiveRecord。基本上使用$ this-> db-> last_query()来查看ActiveRecord构建您的查询的内容,并在phpMyAdmin中运行它以查看查询本身是否有效。

还有一些其他提示,但从我在这里看到的一切看起来都很好。

偷偷摸摸的提示:您可以使用:

return !$this->db->affected_rows() == 0;

而不是:

if( $this->db->affected_rows() == 0 ) return false;
else return true;

答案 1 :(得分:1)

好吧,经过几个小时的 harddebuggin'让它运转起来......:P

相同的数据库表结构。

我的模型功能:

function add_user( $user_data )
{
    $tbl = $this->db->dbprefix('users');

    $this->db->insert($tbl, $user_data);

    return !$this->db->affected_rows() == 0;
}

我的控制器代码:

$user_data = array(
    'nombre'        => $this->input->post('nombre'),
    'apellidos'     => $this->input->post('apellidos'),
    'nif'           => $this->input->post('nif'),
    'direccion'     => $this->db->escape($this->input->post('direccion')),
    'cp'            => $this->input->post('cp'),
    'poblacion'     => $this->input->post('poblacion'),
    'provincia'     => $this->input->post('provincia'),
    'telefono'      => $this->input->post('telefono'),
    'edad'          => $this->input->post('edad'),
    'retribucion'   => $this->input->post('retribucion'),
    'entidad'       => $this->input->post('cc_entidad'),
    'oficina'       => $this->input->post('cc_oficina'),
    'dc'            => $this->input->post('cc_dc'),
    'cc'            => $this->input->post('cc_cc'),
    'centro'        => $this->input->post('centro'),
    'email'         => $this->input->post('email'),
    'especialidad'  => $this->input->post('especialidad'),
    'parent'        => $this->session->userdata('parent')
);

// db adding
if( $this->users->add_user($user_data) )
{
    // logged in!!
}
else
{
    // grrr error!!
}

现在看起来很漂亮! :)

希望这有助于一些迷失的灵魂不要将AR数据阵列构建到模型中,而是控制器。