【问题标题】:Convert DateTime object to string, Gets converted back?将 DateTime 对象转换为字符串,转换回来?
【发布时间】:2016-11-13 19:13:15
【问题描述】:

这有点与Access DateTime->date in php 相关,但实际上是另外一回事。我有一些从 SQL 服务器获取 DateTime 对象的 php。我使用转换它 echo $mydate->format('Y-m-d H:i:s'); 所以它只是一个字符串,或者至少我认为它是。 (我什至使用显式类型转换来确保)。 这是代码,

                } else {
                echo "<br/>object ";
                $dt = (string) $row[$column]->format('Y-m-d H:i:s');
                $this->retVal["nonEmpty"] = true;
                $this->retVal["value"] = (string) $dt;
                echo $this->retVal["value"]; //Returns a string, no issue.
                }

当“字符串”从类中传回时,就会出现问题。

                $convert = new DataConv;
                $convert->conv($newConnectionThree, $fieldNames[$cnt1][$cnt2]["Type"],$fieldNames[$cnt1][$cnt2]["Size"], $tableNames[$cnt1],              $columnNames[$cnt1][$cnt2]);
                $fieldNames[$cnt1][$cnt2]["Type"] = $convert->type;
                $returned = $convert->retVal;
                echo $returned["value"]; //Returns error "Catchable fatal error: Object of class DateTime could not be converted to string".
                var_dump($returned["value"]); //Shows Datetime object. 

现在它又回到了 Datetime 对象。我看不出有任何理由将其转换回来。我只是想知道是否有人至少可以回答为什么会发生这种情况,但是解决方案会有所帮助。没有在课堂之外进行这种转换的任何事情。

【问题讨论】:

  • 您能展示一下您的 DataConv 类的完整代码吗?
  • 全班209行。基本上,它所做的是将 META DATA 中从 SQL 返回的数据类型的数值并将其转换为其字符串值(“-9”类型现在将存储为“N VarChar”)并将其存储在变量中可以在类外访问,然后获取该表的第一行并将值存储在可以在类外访问的数组中。

标签: php date datetime object properties


【解决方案1】:

我发现了问题所在。这与我的想法无关。 无论如何,这是解决方案。

private function get($conn, $table, $column){
    $params = array();
    $expl = array();
    $wrkStrg;
    $tsql = "SELECT [" . $column . "] FROM " . $table;
    $options = array("scrollable" => SQLSRV_CURSOR_KEYSET);
    $getTableData = SQLSRV_QUERY($conn, $tsql, $params, $options);
    if ($getTableData){
    $row = SQLSRV_FETCH_ARRAY($getTableData, SQLSRV_FETCH_ASSOC, SQLSRV_SCROLL_FIRST);
        if ($row !== NULL){
            if (!is_object($row[$column])){
                if (!preg_match('/[\"\'\&\<\>]/', $row[$column])){
                    if (($this->type === "Image") or ($this->type === "Var Binary")){
                        $this->retVal["nonEmpty"] = true;
                        $this->retVal["value"] = bin2hex($row[$column]);
                    } else {
                        $this->retVal["nonEmpty"] = true;
                        $this->retVal["value"] = $row[$column]; //These two lines. 
                    }
                } else {
                    $expl = explode("\"", $row[$column]);
                    $wrkStrg = implode("&quot;", $expl);
                    $expl = explode("'", $wrkStrg);
                    $wrkStrg = implode("&#39;", $expl);
                    $expl = explode("&", $wrkStrg);
                    $wrkStrg = implode("&amp;", $expl);
                    $expl = explode("<", $wrkStrg);
                    $wrkStrg = implode("&lt;", $expl);
                    $expl = explode(">", $wrkStrg);
                    $wrkStrg = implode("&gt;", $expl);
                    $this->retVal["nonEmpty"] = true;
                    $this->retVal["value"] = $wrkStrg;
                    $expl = array();
                    $wrkStrg = Null;
                }
            } else {
                $this->retVal["nonEmpty"] = true;
                $this->retVal["value"] = $row[$column]->format('Y-m-d H:i:s');
            }
            //Used to be here! :(
        }
    } else {
        echo "<p>Table: " . $table . "<br/>Column: " . $column . "</p>";        
        echo "<p>Falure: Seven</p>";
        die(var_dump(SQLSRV_ERRORS(), true));
    }
}

所以我只需要在其中添加 else 并移动这两行。我很尴尬,我没有早点看到。

【讨论】:

  • 我花了 3 天时间盯着这个寻找问题所在。 :(
【解决方案2】:

您可以将对象序列化为字符串并将字符串反序列化为对象
阅读此参考资料
http://php.net/manual/en/language.oop5.serialization.php

【讨论】:

  • 别忘了按 - 这个答案很有用 - 按钮
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 2011-09-21
  • 2016-08-01
  • 2021-12-07
  • 1970-01-01
相关资源
最近更新 更多