2012-04-23 97 views
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。我應該看看其他日誌嗎?

回答

0
  1. 我想的第一件事是:你不應該在json_encode代替使用json_decode?

  2. Did you set error_reporting(E_ALL);

+0

我加入使用error_reporting(E_ALL)的模型,只是在插入之前,我還是沒有看到任何改變/新後日志條目。 我正在看xampp/apache/logs/error.log和xampp/php/logs/php_error_log。我應該找別的地方嗎? – Samudra 2012-04-23 21:39:12

3

試着把$ this-> db - > _ error_message(); DB後插入

這樣的...

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: "); 
+0

這得到迴應到哪裏?由於這是一個Ajax調用,我無法在屏幕上看到數據。我可以將它發送給某個日誌文件嗎? – Samudra 2012-04-23 21:35:50

+1

使用firebug或類似的插件來查看ajax調用的響應。它會告訴你到底你的腳本輸出了什麼。 – Jay 2012-04-23 23:19:29

+0

這是一個愚蠢的錯誤。發現它沒有出現外鍵錯誤。不知道如何檢查Ajax響應。現在我明白了。 非常感謝! – Samudra 2012-05-10 19:11:07

1

不要忘記使用$this->db->last_query() insert語句之後,看看有什麼INSERT語句的模樣。將該插入語句複製並粘貼到您的sql客戶端中,以查看查詢是否實際上自行工作。

+0

打印一個空字符串。這是否意味着查詢沒有形成? – Samudra 2012-05-10 18:58:24

+0

賠率很好。你正在加載數據庫類嗎? – Catfish 2012-05-10 19:28:29

1

嘗試增加

ini_set("display_errors", "1"); 

而且您的插入之前,

var_dump($data); die(); 

看到你逝去的是什麼。然後檢查here以查看是否正確形成了插入記錄。

1

你是不是缺少這個

$post_data['user_id'] 

相反,你使用的是不帶引號

+0

沒有改變任何東西。 :/ – Samudra 2012-05-10 18:57:33

+0

我原本是把報價,並刪除他們,因爲我很沮喪,我會嘗試任何東西。後來意識到查詢失敗了一個外鍵約束。不知道如何早點檢查。現在我明白了! 對不起,非常感謝! – Samudra 2012-05-10 19:13:55