2011-08-07 84 views
0

我已經看了這個劇本好像是30倍,我不能爲我的生活找到我的問題。下面是代碼:PHP致命錯誤:調用一個成員函數bind_param()

function redeem() { 

     $case = $_POST["case"]; 
     $name = $_POST["name"]; 
     $profession = $_POST["profession"]; 
     $city = $_POST["city"]; 
     $country = $_POST["country"]; 
     $totalpercent = $_POST["totalpercent"]; 
     $pretest = $_POST["pretest"]; 
     $posttest = $_POST["posttest"]; 
     $investigationspercent = $_POST["investigationspercent"]; 
     $timesreset = $_POST["timesreset"]; 
     $creditsspent = $_POST["creditsspent"]; 
     $timescompleted = $_POST["timescompleted"]; 

     //Add the information to the learnent_cases_leaderboard table 
     $stmt = $this->db->prepare("INSERT INTO learnent_cases_leaderboard (case, name, profession, city, country, totalpercent, pretest, posttest, investigationspercent, creditsspent, timescompleted, timesreset, timestamp) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)"); 

     $stmt->bind_param("sssssiiiiiii", $case, $name, $profession, $city, $country, $totalpercent, $pretest, $posttest, $investigationspercent, $creditsspent, $timescompleted, $timesreset); //the quotations specify the type of variable; 
     //See http://php.net/manual/en/mysqli-stmt.bind-param.php for more information on bind_param 
     $stmt->execute(); 
     $stmt->close(); 

當我看到錯誤日誌,它給了我這個錯誤消息:

105號線這條線:

PHP Fatal error: Call to a member function bind_param() on a non-object on line 105

代碼:

$stmt->bind_param("sssssiiiiiii", $case, $name, $profession, $city, $country, $totalpercent, $pretest, $posttest, $investigationspercent, $creditsspent, $timescompleted, $timesreset); 
+0

也許我與我的PHP太生疏,但我認爲我們需要看到$這個 - >分貝聲明。這聽起來像$ this-> db-> prepare並不實際返回一個對象。 – Kris

+0

可能的重複[參考 - 這個錯誤在PHP中意味着什麼?](http://stackoverflow.com/questions/12769982/reference-what-does-this-error-mean-in-php) –

回答

4

你從來沒有檢查了$stmt是一個對象。在這種情況下,它更可能是FALSE,這是當你的查詢有一個錯誤在它PDO::prepare回報。

和您的查詢中有一個錯誤,因爲你沒有在反引號分隔的字段名和timestamp是一個關鍵詞。

從第三方API調用函數後檢查錯誤並修復您的查詢。

+2

+1,note 「case」也是[mysql中的關鍵字](http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html),因此也需要轉義。 – vstm

+0

這是字段列表中的第一個字段'... learnent_cases_leaderboard(case,...' – vstm

+0

當然...愚蠢的錯誤。謝謝你們!現在我把「case」和「timestamp」改成了不同的名字, t衝突,劇本運行完美! –

1

首先;總是在本地主機上運行你的查詢來查看你的查詢是否沒有錯誤地執行。接下來始終確保字段和數據類型的你的名字和你在你的代碼是什麼對應

相關問題