我传递到数据库表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']));
答案 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
这样,您就可以避免在查询中转换日期字符串。