0

我在使用以下代码将记录添加到 CodeIgniter 中的“offer”数据库表时遇到问题。

数据库表(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'

只是无法弄清楚,因为表在那里并且字段名称似乎匹配?任何帮助将非常感激。提前致谢!

4

3 回答 3

2

迟到的答案,但可能会帮助其他人前进。

我在其中一个查询中遇到了这个 1054 错误。我的查询是一行:

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

但由于某种原因,我得到的 DB 错误包含一个带有 28 个 null where 语句的查询,其中包含的字段不仅没有从查询中调用,而且在该表中不存在(因此出现了 db 错误)。

我做了一个 $this->db 的转储:

    var_dump($this->db);

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

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

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

此外,为了解决 shomz 的建议,如果出现查询错误,您的 last_query() 将永远不会执行,因为它会在成功查询之后执行。在该行可以执行之前执行停止并出现 db 错误。在这种情况下,它也没有帮助我。但是 var_dump($this->db) 确实为此提供了帮助!

于 2013-09-24T19:36:20.630 回答
0

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

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

此外,您在第一段中写道,该表已被调用,offer但您正在插入offers. 确保你也把它清理干净。

于 2013-01-24T23:00:52.540 回答
0

像这样写一个查询:- $this->db->query("insert into users (username,password) values('$username','$lastname')");

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

于 2020-01-27T11:43:57.187 回答