错误号:1054数据库表插入的未知列问题

时间:2013-01-24 22:50:27

标签: codeigniter

我遇到以下代码的问题,要将记录添加到CodeIgniter中的'offer'db表中。

数据库表(mySQL):

1  ID           int(11)                                 No         
 2  OfferName   varchar(150)    latin1_swedish_ci       No             
 3  OfferLength varchar(150)    latin1_swedish_ci       No  
 4  OfferTitle  varchar(150)    latin1_swedish_ci       No  
 5  OfferDescription    varchar(300)    latin1_swedish_ci   No  
 6  OfferURL    varchar(150)    latin1_swedish_ci       No  
 7  OfferContent    varchar(300)    latin1_swedish_ci       No  
 8  Key varchar(10) latin1_swedish_ci       Yes NULL

模型中的方法(offer_model.php):

public function entry_insert(){

      $data = array(
            'OfferName' => $this->input->post('OfferName'),
            'OfferLength' => $this->input->post('OfferLength'),
            'OfferTitle' => $this->input->post('OfferTitle'),
            'OfferDescription' => $this->input->post('OfferDescription'),
            'OfferURL' => $this->input->post('OfferURL'),
            'OfferContent' => $this->input->post('OfferContent'),
        );

$this->db->insert('offers',$data);

 }

控制器:

function addOffer() {
    //if the form is submitted
    if ($this->input->post('mysubmit')) {
        //insert data into db using offer_model model

        $this->offer_model->entry_insert();

    }

视图中的表格:

<div class="form">
            <?php echo form_open('newOffer/addOffer'); ?>
            <legend>Please enter details for your new offer</legend>

            <label for="OfferName">Offer Name:  <span class="required">*</span></label>
            <input type="text" name="OfferName" id="Offer Name" placeholder="Please enter the name of your offer"/>
            <label for="OfferLength">Offer length:</label>
            <input type="text" name="OfferLength" id="OfferLength" placeholder="Please enter the length of your offer"/>
            <label for="OfferTitle">Offer title:</label>
            <input type="text" name="OfferTitle" id="OfferTitle" placeholder="Please enter the title of your new offer"/>
            <label for="OfferDescription">Offer description: </label>
            <input type="text" name="OfferDescription" id="OfferDescription" placeholder="Please enter a description of your new offer"/>
            <label for="OfferURL">Offer link URL:</label>
            <input type="text" name="OfferURL" id="OfferURL" placeholder="Please enter the URL of your new offer"/>
            <label for="OfferContent">Offer content:</label>
            <input type="text" name="OfferContent" id="OfferContent" placeholder="Please enter the content for your new offer"/>
            <fieldset class="submit_field">
                <?php echo form_submit('mysubmit', 'Submit Form'); ?>
            </fieldset>

        </div><!-- end of form div -->

提交表单结果如下:

错误号码:1054'字段列表'中的未知列'OfferName'

只是因为桌子在那里并且字段名称似乎匹配而无法理解? 任何帮助将非常感激。提前谢谢!

3 个答案:

答案 0 :(得分:2)

迟到的答案,但可能有助于其他人继续前进。

我在其中一个查询中收到此1054错误。我的查询是一行:

$q = $this->db->get('table'); 

但由于某种原因,我得到的数据库错误包括一个28 null的查询,其中包含的字段不仅没有从查询中调用但在该表中不存在(因此db错误)。

我做了$ this-&gt; db:

的转储
    var_dump($this->db);

...它向我展示了CI ar_where var确实已经满了这个奇怪的数据。 我意识到这是来自之前在页面上执行的唯一其他查询,然后实现了原因。之前的数据库调用是从库中进行的,因此使用了:

$this->CI->db->get('someTable');

因此以前的数据没有被清除。手动清除第一个库函数末尾的数据后,所有工作都再次正常,1054错误消失了。

另外,为了解决shomz建议,如果存在查询错误,则在成功查询之后,last_query()将永远不会执行。执行暂停之前可以使用db错误执行该行。在这种情况下,它也没有帮助我。但var_dump($ this-&gt; db)确实有助于此目的!

答案 1 :(得分:0)

echo $this->db->last_query();将在许多情况下拯救你的生命。 您的模型中还有语法错误(尾随逗号):

'OfferContent' => $this->input->post('OfferContent'),

另外,您在第一段中写道,该表名为offer,但您正在插入offers。确保你也清理了它。

答案 2 :(得分:0)

这样写查询: $ this-> db-> query(“插入用户(用户名,密码)值('$ username','$ lastname')”);

变量名应该用单引号引起来。