2011-06-06 98 views
4

我已經在mysql中編寫了一個存儲過程來進行更新。當你在mysql命令行中執行它時(通過Mysql編輯器),這工作正常。'字段列表'中的未知列'valueToPass'MySQL錯誤#:1054

存儲過程:

CREATE DEFINER=`root`@`localhost` PROCEDURE `Deduction_Of_PL`(
    IN P_EMPID VARCHAR(1000) 
) 
BEGIN 
    DECLARE PresentYearPL VARCHAR(1000); 

    set PresentYearPL=(select Present_Year_PL from leave_calculate_pl where employee_id=P_EMPID); 

    IF(PresentYearPL<=0) THEN 
    UPDATE leave_calculate_pl 
    SET Carrie_PL=Carrie_PL-1 
    where employee_id=P_EMPID; 
    ELSE 
    UPDATE leave_calculate_pl 
    SET Present_Year_PL=Present_Year_PL-1 
    where employee_id= P_EMPID; 
    END IF; 

END $$ 

我調用PHP同一個存儲過程,我傳遞的輸入參數也。

$LeaveTypeID_G=$this->getLeaveTypeId(); 
$query_G="CALL Deduction_Of_PL($LeaveTypeID_G)"; 

它給人錯誤的

Unknown column 'parameter_value' in 'field list' MySQL Error # :1054 

請讓我知道哪裏出了問題,我怎麼能解決這個問題。

+0

添加您的代碼人嗎?它可以是任何錯誤的 – 2011-06-06 13:14:52

+0

請發佈SP。謝謝。 – Damien 2011-06-06 13:15:15

+0

添加您的PHP代碼,因爲這是發生錯誤的地方。順便說一句你爲什麼聲明變量爲VARCHAR(1000)並將它們用作數值 – wimvds 2011-06-06 13:22:54

回答

0

嗯,我不是一個SQL的專家,我沒有看到太多的PHP代碼發佈,但對我來說「未知列」將引用問題的SQL表中的列名稱,或更準確地說,它無法找到您告訴它進入該表的列。我要看的第一個地方是你要求從列中拉出的select語句「Present_Year_PL」我發現這是大小寫敏感的,所以請確保它匹配激動人心的列表名稱。我要看的下一個地方是在你告訴它匹配agist the colum「employee_id」的地方,現在這全是小寫,因爲你的列名是全部大寫的,而這是技術性的合法的,(就像實際的表,你可以在所有大小寫中有一列,而在所有大寫字母中可以有一列),如果所有大寫字母都用在表中的一個字段名中,則所有的字段名都是相同的,反之亦然。如果說表中的「員工ID」列是「EMPLOYEE_ID」,那麼表中就不存在「employee_id」actualy,這會導致您遇到的問題。還要確保你沒有像「employeeid」或「employee-id」或甚至「員工ID」那樣的東西,因爲當眼睛看到域名時,這些很容易被誤認爲錯誤,但會給你錯誤。

0

兩個指針:

  • 什麼是PHP variabele $LeaveTypeID_G的價值? echo $LeaveTypeID_G;(php)
  • 其次是MySql調用觸發器? show triggers;(mysql)
1

我剛剛遇到了同樣的問題。我試圖將登錄用戶的用戶名傳遞給存儲過程以將其記錄在日誌中。

存儲過程運行正常時,我直接調用它(從MySQL工作臺),並從PHP正常工作,當我只是通過日期/時間。現在,我將這個用戶名作爲字符串傳遞,但是它破裂了。

對我來說,修復是用單引號,任何東西字符串參數是這樣的:
$query = "CALL $procedure_name ($date_parameter, '$string_parameter')";

希望幫助其他人碰到這個絆腳石。

相關問題