2013-07-21 60 views
3

好吧,所以我試圖更新一個博客條目,並且當我調用一個非對象的成員函數bind_param()時,嘗試運行該腳本。我已經做了大量的研究,看看我是否可以自己修復它,但我必須錯過一些東西。調用一個非對象的成員函數bind_param()MySQLi

<?php 
$stmt = $mysqli->prepare("UPDATE blogentries SET 
    headline = ?, 
    image = ?, 
    caption = ?, 
    article = ? 
    WHERE id = ?"); 
$stmt->bind_param('ssssi', 
    $_POST['headline'], 
    $_POST['image'], 
    $_POST['caption'], 
    $_POST['article'], 
    $_POST['id']); 
$stmt->execute(); 
$stmt->close(); 

?> 

由於提前,

奧斯汀

更新:這裏的DB連接

我加爲了調試的目的額外的$ mysqli的連接,並出現錯誤,即使沒有它。

+0

可以顯示該文件的完整代碼?數據庫連接在哪裏? – 2013-07-21 01:25:32

+0

完整的代碼長度爲幾千行,所以我不會那樣做,但數據庫連接在public_html文件夾之外,我將更新主文章以顯示數據庫連接。 – Austen

+0

你是怎麼調用/包括public_html文件夾外部的db連接文件的? – Sean

回答

14

$stmt可能是false

if ($stmt = $mysqli->prepare(...)) { 
    $stmt->bind_param(...); 
    ... 
} 
else { 
    printf("Errormessage: %s\n", $mysqli->error); 
} 
+2

爲什麼$ stmt是假的? – heinkasner

+1

當查詢中存在語法錯誤時,這是​​錯誤的。在我的情況下,我正在使用字體名稱和拼寫錯誤。解決這個問題的一種方法是手動將查詢輸入到mysql中,並將您的查詢與您的PHP代碼進行比較。 – mbokil

+0

抓取錯誤消息非常重要。 – elliotrock

-1

如果所有到數據庫的連接是否正確,儘量尋找 在查詢語法。對我而言,我正在執行聯接,並且沒有 在where子句字段中指定了「TABLENAME」,其中 表都有一列。

1

我通過手動測試查詢解決了這個問題。事實證明,將每個字段名稱置於反向標記之間,並刪除查詢中標記有問號參數的任何引號。

相關問題