使用PDO将数组的日期格式更改为MySQL格式

时间:2013-11-27 22:06:44

标签: php mysql arrays pdo

我传递到数据库表format ($fanniemaeDate)的数组日期column (date)是2013年11月19日,我正在尝试将其转换为MySQL格式2013-11-19在我的PDO准备中声明,但它给了我一个错误"SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens"

我只是在学习PDO,所以不确定在准备语句中我的STR_TO_DATE格式有什么问题,或者这是否是准备语句的正确方法。

如果我从准备语句中删除STR_TO_DATE,它会正确地传递时间和费率,并将日期存储为0000-00-00

我需要知道编写准备语句的正确方法。

//PDO insert prepare statement for fannie_90dayrate table
$insertIrate = $pdo->prepare("INSERT INTO fannie_90dayrate (date, time, 90dayrate) 
VALUES (STR_TO_DATE(':fanniemaeDate', '%m/%d/%Y'), :fanniemaeTime, :fanniemaeRate)");  

//PDO execute statement
$insertIrate->execute(array(
':fanniemaeDate' => $fanniemaeDate['Fannie Mae Date'],
':fanniemaeTime' => $fanniemaeTime['Fannie Mae Time'],
':fanniemaeRate' => $fanniemaeRate['Fannie Mae Rate']));

1 个答案:

答案 0 :(得分:1)

删除

:fanniemaeDate周围的引号
... STR_TO_DATE(':fanniemaeDate', '%m/%d/%Y') ...

在参数占位符周围放置引号会导致忽略它,从而使占位符数量/参数数量失去平衡。

旁注......

我建议使用PHP中的实际DateTime对象而不是日期字符串。这样,您可以非常轻松地切换格式,例如

$fanniemaeDate['Fannie Mae Date'] = DateTime::createFromFormat('m/d/Y', '11/19/2013');

// snip

$insertIrate->execute(array(
    ':fanniemaeDate' => $fanniemaeDate['Fannie Mae Date']->format('Y-m-d'),
    // etc

这样,您就可以避免在查询中转换日期字符串。