将DateTime对象转换为字符串,获取转换回?
这有点涉及Access DateTime->date in php,但实际上是别的东西。我有一些从SQL服务器获取DateTime对象的php。我转换它使用 echo $mydate->format('Y-m-d H:i:s');
,以便它只是一个字符串或至少我认为它是。 (我甚至使用显式类型转换来确保)。 这里是代码,当“串”传回该集体出现将DateTime对象转换为字符串,获取转换回?
} 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对象。我看不出有任何理由将其转回。我只是想知道是否有人至少有答案,为什么会发生这种情况,但解决方案会有所帮助。除了在课堂外进行转换之外的任何事情。
我发现了什么问题了。这与我的想法无关。 无论如何,这里是解决方案。
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(""", $expl);
$expl = explode("'", $wrkStrg);
$wrkStrg = implode("'", $expl);
$expl = explode("&", $wrkStrg);
$wrkStrg = implode("&", $expl);
$expl = explode("<", $wrkStrg);
$wrkStrg = implode("<", $expl);
$expl = explode(">", $wrkStrg);
$wrkStrg = implode(">", $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));
}
}
所以我只需要添加那里,然后移动那两条线。我很尴尬,我没有早点看到。
我花了3天的时间盯着这看寻找什么是错的。 :( –
你可以序列化的对象到字符串和反序列化字符串对象
阅读参考
http://php.net/manual/en/language.oop5.serialization.php
这是一个很好的阅读。感谢那。 –
不要忘记推 - 这个答案很有用 - 按钮 – Fadakar
可以显示DataConv类的完整代码吗? – vascowhite
全班共209条。基本上它所做的是将META DATA中从SQL返回的数据类型的数值转换为其字符串值(现在将“-9”类型存储为“N VarChar”)并将其存储在变量中可以在类之外访问,然后获取该表的第一行并将该值存储在可以在类之外访问的数组中。 –