【问题标题】:<b>Catchable fatal error</b>: Object of class DateTime could not be converted to string<b>可捕获的致命错误</b>:DateTime 类的对象无法转换为字符串
【发布时间】:2015-08-28 03:24:25
【问题描述】:

我正在尝试向 sql 服务器执行插入查询。但是,每次我执行查询时,它都会返回

可捕获的致命错误:不能是 DateTime 类的对象 在 C:\xampp\htdocs\fusion\insertTrade.php 中转换为字符串 上线 29

我不明白发生了什么,因为在那一行我什至没有对日期时间做任何事情。有人可以帮忙吗?

插入交易.php:

$fullName = $_POST["fullName"];
  $ticSymbol = $_POST["tickSymbol"];
  $limitOrder = $_POST["limitOrder"];
  $limitPrice = $_POST["limitPrice"];
  $quantity = $_POST["quantity"];
  $contingentOrder = $_POST["contingentOrder"];
  $contingentLimitPrice = $_POST["contingentPrice"];
  $contingentQuantity = $_POST["contingentQuantity"];
  $date = new DateTime();
  $date -> setDate($_POST["year"], $_POST["month"], $_POST["day"]);
  $date -> setTime($_POST["hours"], $_POST["minutes"], $_POST["seconds"]);
  // var_dump($date);
      $query = "INSERT INTO [competitionTrade]
                   ([fullName]
                   ,[date]
                   ,[limitOrder]
                   ,[quantity]
                   ,[tickerSymbol]
                   ,[limitPrice]
                   ,[contingentOrder]
                   ,[contingentQuantity]
                   ,[contingentLimitPrice])
             VALUES
                   (<$fullName, varchar(50),>
                   ,<$date, datetime,>
                   ,<$limitOrder, varchar(50),> //line 29
                   ,<$quantity, int,>
                   ,<$ticSymbol, varchar(50),>
                   ,<$limitPrice, float,>
                   ,<$contingentOrder, varchar(50),>
                   ,<$contingentQuantity, int,>
                   ,<$contingentLimitPrice, float,>)";
      $stmt = sqlsrv_query($conn, $query);

编辑 1:根据 D4V1D 的建议,我将其更改为:

  $fullName = $_POST["fullName"];
      $ticSymbol = $_POST["tickSymbol"];
      $limitOrder = $_POST["limitOrder"];
      $limitPrice = $_POST["limitPrice"];
      $quantity = $_POST["quantity"];
      $contingentOrder = $_POST["contingentOrder"];
      $contingentLimitPrice = $_POST["contingentPrice"];
      $contingentQuantity = $_POST["contingentQuantity"];
      $date = new DateTime();
      $date -> setDate($_POST["year"], $_POST["month"], $_POST["day"]);
      $date -> setTime($_POST["hours"], $_POST["minutes"], $_POST["seconds"]);
      // $dateString = $date->format('Y-m-d H:i:s');
      // var_dump($date);
          $query = "INSERT INTO [competitionTrade]
                       ([fullName]
                       ,[date]
                       ,[limitOrder]
                       ,[quantity]
                       ,[tickerSymbol]
                       ,[limitPrice]
                       ,[contingentOrder]
                       ,[contingentQuantity]
                       ,[contingentLimitPrice])
                 VALUES
                       (<$fullName, varchar(50),>
                       ,<$date->format('Y-m-d H:i:s'), datetime,> //line 29
                       ,<$limitOrder, varchar(50),>
                       ,<$quantity, int,>
                       ,<$ticSymbol, varchar(50),>
                       ,<$limitPrice, float,>
                       ,<$contingentOrder, varchar(50),>
                       ,<$contingentQuantity, int,>
                       ,<$contingentLimitPrice, float,>)";
          $stmt = sqlsrv_query($conn, $query);

现在说

未定义的属性:C:\xampp\htdocs\fusion\insertTrade.php 中的 DateTime::$format 第 29

【问题讨论】:

  • 插入$date-&gt;format('Y-m-d H:i:s')(返回一个字符串)而不是只插入$date(这是一个Datetime对象)。
  • 获取 PHP 发送到 SQL Server 的实际字符串并尝试手动运行它。有一个日期时间列可能格式错误。

标签: php sql sql-server datetime


【解决方案1】:

这是因为您试图在 [date] 字段中包含 object 日期时间在字符串 $query 中(因此出现 Object could not be converted to string 错误)。

你需要这样做:

$date = $date->format('Y-m-d H:i:s'); // $date is now a string
$query = "INSERT INTO [competitionTrade]
                   ([fullName]
                   ,[date]
                   ,[limitOrder]
                   ,[quantity]
                   ,[tickerSymbol]
                   ,[limitPrice]
                   ,[contingentOrder]
                   ,[contingentQuantity]
                   ,[contingentLimitPrice])
             VALUES
                   (<$fullName, varchar(50),>
                   ,<$date, datetime,>
                   ,<$limitOrder, varchar(50),>
                   ,<$quantity, int,>
                   ,<$ticSymbol, varchar(50),>
                   ,<$limitPrice, float,>
                   ,<$contingentOrder, varchar(50),>
                   ,<$contingentQuantity, int,>
                   ,<$contingentLimitPrice, float,>)";

【讨论】:

  • 我按照你说的做了,结果返回Undefined property: DateTime::$format in &lt;b&gt;C:\xampp\htdocs\fusion\insertTrade.php&lt;/b&gt; on line &lt;b&gt;28&lt;/b&gt;&lt;br /&gt;
  • 这不是属性,而是method。你确定你用对了吗?
  • 好的。然后尝试在查询之前添加$date = $date-&gt;format('Y-m-d H:i:s'); 并在您的$query 中使用$date。输出是什么?
  • 修复了它。谢谢
猜你喜欢
  • 2014-06-21
  • 2013-10-08
  • 1970-01-01
  • 2015-03-08
  • 2013-08-07
  • 2015-08-28
  • 2018-03-12
  • 2014-02-21
相关资源
最近更新 更多