2012-06-04 115 views
1

這是我的聲明是如何看起來像。奇怪的準備語句錯誤

   $stmt = $this->db->prepare(" 
         select q.id 
         from questions q 
         left outer join (
         select max(chk_date) as questions_last_chk_date 
         FROM last_check_date 
         where user_id = ? 
         AND chk_token=?) lcd 
         on q.add_dt > lcd.questions_last_chk_date 
         WHERE q.author_id<>? 
       ") or die($this->db->error); 
       $stmt->bind_param("isi", $_SESSION["userID"], "q", $_SESSION["userID"]) or die($stmt->error); 

我有2個問題

1)獲得錯誤信息

致命錯誤:無法通過引用

爲什麼會出現此錯誤傳遞參數3?順便說一句,我知道last_check_date表是空的,但我認爲這與這個問題沒有關係。

2)在windows上,獲取錯誤消息表last_check_date不存在,但我100%知道沒有錯字,並且存在表。我用Navicat - db amanger應用程序嘗試了相同的查詢並得到了結果。但是,當我嘗試使用PHP獲取此錯誤。在遠程Linux服務器上它工作,並在問題1中獲取錯誤消息。嘗試重新啓動mysql服務,重命名爲其他名稱並將名稱更改回上一個。沒有成功!我該如何解決這個問題?

+1

我不是MySQLi專家,但我認爲你不能將靜態參數綁定到查詢。在我看來,這是完全合理的。因此,要麼將參數3設置爲變量並傳遞它,要麼更改查詢,以便現在參數3已經存在。 – clentfort

+0

@clentfort我gachu。但無法通過外連接獲得此項工作。我沒有外連接的經驗。這就是爲什麼向社區發佈問題 – heron

回答

3

您必須將q放入一個變量中。

僅供參考,儘量不要使用等於表別名或引用的字符串值。當您使用q別名表時,您傳遞的值爲q。這不是一個錯誤,但如果您需要對查詢進行回顯,可能會非常困惑。