【问题标题】:Codeigniter query does not insertCodeigniter 查询不插入
【发布时间】:2012-04-23 14:37:51
【问题描述】:

数据是这样从前端发送的:

var data = {
                'user_id':userid,
                'qid':array[qnum].qid,
                'user_ans':userAnswers[qnum].answer,
                'user_time':userTime,
                'exerciseid':exid,
                'point_scored':points
        };
$.post('<?php echo base_url()?>main/update_user_score',
            { myData : data },
            function(result){} );

在我的“主”控制器中,我有:

$post_data = $_POST['myData'];

$data = array(
            'user_id' => $post_data[user_id] ,
            'qid' => $post_data[qid],
            'user_ans' => $post_data[user_ans],
            'user_time' => $post_data[user_time],
            'exerciseid' => $post_data[exerciseid],
            'point_scored' => $post_data[point_scored]
        );

$this->load->model('Question_model','questions');
$this->questions->update_user_attempt($data);

在我的 Question_model / update_user_attempt 中:

error_log("data in model BEFORE INSERT:" . json_encode($data));
$this->db->insert('user_attempt', $data);
error_log("data in model AFTER INSERT: ");

问题是,数据可以很好地到达(至少在我看来)模型。这是日志条目:

[23-Apr-2012 16:04:47] data in model BEFORE INSERT:{"user_id":"5","qid":"3","user_ans":"d","user_time":"3","exerciseid":"cr1","point_scored":"35"}

但是没有“插入后”日志条目。插入本身不会发生,插入后的日志条目也不会发生。

我可以很好地读取数据库。所以我在 phpmyadmin 中检查了“config/database.php”中用户的用户权限,并且该用户具有 ALL 权限,包括 INSERT。

那么两个问题:

  1. 有什么问题?我犯了什么错误?
  2. 我什至如何开始了解插入语句的情况? (我在日志中找不到任何内容。)
  3. 我正在查看 xampp/apache/logs/error.log 和 xampp/php/logs/php_error_log。我应该查看其他日志吗?

【问题讨论】:

    标签: php mysql codeigniter codeigniter-2


    【解决方案1】:

    试着把 $this->db->_error_message();数据库插入后

    像这样……

    error_log("data in model BEFORE INSERT:" . json_encode($data));
    $this->db->insert('user_attempt', $data);
    echo $this->db->_error_message();
    error_log("data in model AFTER INSERT: ");
    

    【讨论】:

    • 这会在哪里得到回应?由于这是一个 ajax 调用,我无法在屏幕上看到数据。我可以将其发送到某个日志文件吗?
    • 使用 firebug 或类似插件查看 ajax 调用的响应。它会准确地向您展示您的脚本输出的内容。
    • 这是一个愚蠢的错误。发现它失败了一个外键错误。不知道如何检查 Ajax 响应。现在我明白了。非常感谢!
    【解决方案2】:

    你是不是错过了这个

    $post_data['user_id']
    

    相反,您使用的是不带引号

    【讨论】:

    • 我最初放了引号,然后因为我很沮丧而删除了它们,我会尝试任何事情。后来意识到查询失败了外键约束。之前不知道如何检查。现在我明白了!给您添麻烦了,非常感谢!
    【解决方案3】:

    不要忘记在插入语句后使用$this-&gt;db-&gt;last_query() 来查看插入语句的样子。将该插入语句复制并粘贴到您的 sql 客户端中,以查看查询是否真正独立运行。

    【讨论】:

    • 打印一个空字符串。这是否意味着查询没有形成??
    【解决方案4】:

    尝试添加

    ini_set("display_errors", "1");
    

    在插入之前,

    var_dump($data); die(); 
    

    准确查看您正在传递的内容。然后检查here,看看你是否正确地形成了插入语句。

    【讨论】:

      【解决方案5】:
      1. 我首先想到的是:你不应该使用 json_decode 代替 json_encode 吗?

      2. 你设置error_reporting(E_ALL);了吗?

      【讨论】:

      • 在我将 error_reporting(E_ALL) 添加到模型之后,就在插入之前,我仍然看不到任何更改/新的日志条目。我正在查看 xampp/apache/logs/error.log 和 xampp/php/logs/php_error_log 。我应该寻找其他地方吗?
      猜你喜欢
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      相关资源
      最近更新 更多