我创建了以下正常工作的存储过程。
CREATE DEFINER=`root`@`localhost` PROCEDURE `SPTeam`(IN date_x date, OUT emplist3 varchar(200))
BEGIN
select employee.name as emplist3
from employee
where employee.id IN (
select emp_position.employee_id
from emp_position
where emp_position.employee_id NOT IN (
select emp_event.employee_id
from emp_event
where emp_event.date = date_x
)
AND emp_position.position = "Cameraman"
);
END
我通过codeigniter模型中的以下代码调用此存储过程。
$SQL = "call SPTeam("
. $date.","
. " @emplist3" //output
.");";
$this->db->trans_start();
$query = $this->db->query($SQL);
$this->db->trans_complete();
$result = array();
foreach($query->result() as $rows){
$result[]=$rows;
}
return $query->result();
}
在我的控制器中,我将$ date传递给上面的模型函数,如下所示。
$date = '06/12/2016';
$data= $this->employee_model->sp_call($date) ;
但它给出了错误的结果。 我也尝试了以下日期格式。
$date = '2016-12-14';
$data= $this->employee_model->sp_call($date) ;
它会出现以下错误。
Error Number: 1292
Incorrect date value: '1990' for column 'date_x' at row 1
call SPTeam(2016-12-14, @emplist3);
有人请帮我纠正。
答案 0 :(得分:0)
这可能是一些不同的事情。首先,确保传递给SP的字符串值是YYYY-MM-DD格式,因为这是MySQL中的Date列。
此外,SP可能需要传入日期字符串以在其周围加上单引号才能正确处理。
尝试这样的事情:
$date = "'2016-12-14'";
或者这(注意添加单引号):
$SQL = "call SPTeam('"
. $date."',"
. " @emplist3"
.");";
如果这不起作用,您可能需要调整SP以使用MySQL中的 STR_TO_DATE function 。由于您在技术上传递了一个字符串,因此您可能需要确保它的格式相应。
希望这有帮助。