【问题标题】:Change date format for array to MySQL format using PDO使用 PDO 将数组的日期格式更改为 MySQL 格式
【发布时间】:2013-12-13 18:37:29
【问题描述】:

我传递给数据库表 column (date) 的数组日期 format ($fanniemaeDate) 是 11/19/2013,我试图在我的 PDO 准备语句中将其转换为 MySQL 格式 2013-11-19,但是它给我一个错误"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

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

//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']));

【问题讨论】:

    标签: php mysql arrays pdo


    【解决方案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
    

    这样,您就不必在查询中转换日期字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-03
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-04
      • 1970-01-01
      相关资源
      最近更新 更多