从codeigniter将日期传递给mysql存储过程

时间:2016-12-07 15:36:40

标签: mysql codeigniter stored-procedures

我创建了以下正常工作的存储过程。

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);

有人请帮我纠正。

1 个答案:

答案 0 :(得分:0)

这可能是一些不同的事情。首先,确保传递给SP的字符串值是YYYY-MM-DD格式,因为这是MySQL中的Date列。

此外,SP可能需要传入日期字符串以在其周围加上单引号才能正确处理。

尝试这样的事情:

$date = "'2016-12-14'";

或者这(注意添加单引号):

 $SQL = "call SPTeam('"
    . $date."',"
    . " @emplist3" 
    .");";

如果这不起作用,您可能需要调整SP以使用MySQL中的 STR_TO_DATE function 。由于您在技术上传递了一个字符串,因此您可能需要确保它的格式相应。

希望这有帮助。