2017-02-20 89 views
0

您好工作,庫MySQLi預處理語句不是while循環

我工作的一個while循環中查詢。但是,第二輪運行不起作用。 (在稍後結束時,某些結果得到迴應後)。我試着調用第二個查詢$stma,但是這導致了相同的錯誤。

錯誤

Fatal error: Call to a member function bind_param() on a non-object in PATH on line 96 

代碼

// Prepare Query 
    $stmt = $db->prepare("SELECT id, fullname, shortname FROM languages WHERE (state = '0')"); 
    $stmt->execute(); 

    // Get result from query. 
    $stmt->bind_result($lang_id, $lang_name, $lang_short); 

    // While Loop 
    while($language = $stmt->fetch()){ 

     // Get Language Texts 
     $stmt = $db->prepare("SELECT id, article_id, article_language, article_text, article_recuse, article_spec FROM article_content WHERE article_id = ? AND article_language = ?"); 

     $stmt->bind_param("is", $artikel_nummer, $lang_short); // This is line 96. 
     $stmt->execute(); 

     // Get result from query. 
     $stmt->bind_result($t_id, $t_articleid, $t_language, $t_text, $t_recuse, $t_spec); 
     $stmt->fetch(); 

我是相當新的預處理語句,所以我不知道到底是什麼問題。我在查詢上運行了一個var_dump(),它返回false,但是,在WHILE循環的其他地方或外部運行查詢(當我手動定義兩個變量時)。

我回應了$artikel_nummer$lang_short,它返回它們的值。

問題是以下幾點:爲什麼第二個查詢沒有運行,並因此返回上述錯誤?

+1

你不這樣做有'$ language'爲循環任何東西,也不需要'$ lang_id'或'$ lang_name'。 –

+0

您正在覆蓋您的'$ stmt'變量,同時仍在每次迭代中嘗試從其中讀取 – Phil

+0

您在將值綁定到它之前正在執行語句。 – Mike

回答

1

在你的循環中,你覆蓋了你的$stm變量,該變量持有對你的初始準備語句的引用(事實上就是你的循環的條件)。對於內環路發生的所有問題,你必須選擇一個不同的變量名:

while($language = $stmt->fetch()){ 

     // Get Language Texts 
     $_stmt = $db->prepare("SELECT id, article_id, article_language, article_text, article_recuse, article_spec FROM article_content WHERE article_id = ? AND article_language = ?"); 

     $_stmt->bind_param("is", $artikel_nummer, $lang_short); // This is line 96. 
     $_stmt->execute(); 

     // Get result from query. 
     $_stmt->bind_result($t_id, $t_articleid, $t_language, $t_text, $t_recuse, $t_spec); 
     $_stmt->fetch(); 
} 
+0

和'$ language'用在哪裏? –

+1

技術上,它很重要嗎?我擔心問題中發佈的錯誤。 –

+0

你好。這似乎部分解決了錯誤。它現在運行一次循環,之後再次顯示相同的錯誤。 – Synthiatic