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

标签 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();
}

在我的 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/

相关文章:

php - Firebase 与 php 中的 codeigniter 的连接

MySQL - 存储过程限制问题

mysql - 如何处理数据库中存储的大量文档?

mysql - 如何从表中选择多个不同的数据?

php - MySQL 空间扩展和 PHP

php - 准备来自 Web 表单的数据以插入 mysql 数据库

javascript - 购物车 block 未更新 codeigniter

PHP:Codeigniter 在两个日期内获得即将到来的生日

c# - 使用 EF 调用 oracle 存储过程失败

mysql - 如何从 ~200k 文本/html 生成与相似文本匹配/比较的散列?