我创建了以下正常工作的存储过程。
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();
}
在我的 Controller 中,我将 $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);
有人请帮我改正这个问题。
最佳答案
这可能是一些不同的事情。首先,确保传递给 SP 的字符串值是 YYYY-MM-DD 格式,因为这是 MySQL 中的日期列。
此外,SP 可能要求传入的日期字符串用单引号括起来,以便正确处理。
尝试这样的事情:
$date = "'2016-12-14'";
或者这个(注意单引号的添加):
$SQL = "call SPTeam('"
. $date."',"
. " @emplist3"
.");";
如果这不起作用,您可能需要调整 SP 以使用 STR_TO_DATE function 在 MySQL 中。由于您在技术上传递的是字符串,因此您可能需要确保其格式相应。
希望这对您有所帮助。
关于mysql - 将日期从 codeigniter 传递到 mysql 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41021482/