2016-07-11 6 views
1

これは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オブジェクトに戻る。私はそれを元に戻す理由は見当たりません。私はちょうどなぜこれが起こるのか誰かが答えを持っているかどうか疑問に思っていたが、解決策が役立つだろう。そのクラスの外でその変換を行うことは不十分です。

+0

DataConvクラスの完全なコードを表示できますか? – vascowhite

+0

クラス全体は209行です。基本的には、META DATAのSQLから返されたデータ型の数値をとり、文字列値に変換します( "-9"の型は "N VarChar"として格納されます)。これを変数に格納しますそのクラスの外部からアクセスすることができ、そのテーブルの最初の行をフェッチし、そのクラスの外部からアクセス可能な配列に値を格納します。 –

答えて

0

このリファレンスを読むobjectに文字列とアンシリアライズオブジェクトを文字列にシリアライズすることができます。私が思っていたこととは何の関係もありませんでした。とにかく、ここに解決策があります。

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)); 
    } 
} 

私はちょうどそこにそれを追加し、それらの2行を移動する必要がありました。私はそれがもっと早く見えなかったことに恥ずかしいです。

+0

私は3日間このことを見つめ、何が間違っているのか探しました。 :( –

関連する問題