Codeigniter查询不插入数据。

3
数据从前端以以下方式发送:
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"}

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

我可以很好地从数据库中读取。因此,我检查了“config/database.php”中用户的phpMyAdmin用户权限,并且该用户具有全部权限,包括INSERT。

所以有两个问题:

  1. 问题出在哪里?我犯了什么错误?
  2. 如何开始查找插入语句的问题?(我在日志中找不到任何信息。)
  3. 我正在查看xampp/apache/logs/error.log和xampp/php/logs/php_error_log。我应该查看其他日志吗?
5个回答

3
尝试在数据库插入后添加$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调用,我看不到屏幕上的数据。我能把它发送到某个日志文件吗? - Samudra
1
使用Firebug或类似的插件查看Ajax调用的响应。它将准确地显示您的脚本输出内容。 - Jay
这是一个愚蠢的错误。发现它失败了一个外键错误。不知道如何检查Ajax响应。现在我知道了。 非常感谢! - Samudra

1
不要忘记在插入语句后使用$this->db->last_query()来查看插入语句的样子。将该插入语句复制并粘贴到SQL客户端中,以查看查询是否能够独立正常工作。

打印一个空字符串。这是不是意味着查询没有被形成? - Samudra

1

尝试添加

ini_set("display_errors", "1");

在你进行插入之前,

var_dump($data); die(); 

查看您传递的内容。然后检查此处,确保您正确地形成了插入语句。


1

你不是忘了这个吗?

$post_data['user_id']

相反,你正在使用没有引号的方式


我最初放了引号,后来因为太沮丧而将它们删除,我会尝试任何事情。后来意识到查询未通过外键约束。之前不知道如何检查。现在我知道了! 对于造成的麻烦,非常抱歉并非常感谢! - Samudra

0
  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。我应该去别的地方看吗? - Samudra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接