2011-06-06 121 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')";

希望帮助其他人碰到这个绊脚石。

相关问题