回显一个允许空值的日期变量的致命错误

时间:2016-07-13 12:15:18

标签: php html mysql sql sql-server

我正在尝试使用PHP中的SQL Server中的表的不同值来填充HTML表。这是代码。

...
while($datosPerfil = sqlsrv_fetch_array($resultado)){
            echo "<tr>";
            echo "<td>";
            echo $datosPerfil['CPR_Name'];
            echo "</td>";
            echo "<td>";
            echo $datosPerfil['CON_SC_Id'];
            echo "</td>";
            echo "<td>";
            echo $datosPerfil['CON_Tel_Number'];
            echo "</td>";
            echo "<td>";
            echo $datosPerfil['CON_Startup_Date'];
            echo "</td>";
            echo "</tr>";
}
....

字段“ CON_Startup_Date ”是日期类型并允许空值。这就是出现的错误:

可捕获的致命错误:类DateTime的对象无法转换为字符串

当我写:

echo $datosPerfil['CON_Startup_Date']->format("Y-m-d");

它有效,但到达空值时显示错误:

致命错误:在null上调用成员函数format()

任何允许在日期类型中正确运行echo值并且正确运行的解决方案吗?

3 个答案:

答案 0 :(得分:1)

查找以下代码:

while($datosPerfil = sqlsrv_fetch_array($resultado)){
    echo "<tr>";
    echo "<td>";
    echo $datosPerfil['CPR_Name'];
    echo "</td>";
    echo "<td>";
    echo $datosPerfil['CON_SC_Id'];
    echo "</td>";
    echo "<td>";
    echo $datosPerfil['CON_Tel_Number'];
    echo "</td>";
    echo "<td>";
    echo (empty($datosPerfil['CON_Startup_Date'])) ? "-" : $datosPerfil['CON_Startup_Date']->format('Y-m-d');
    echo "</td>";
    echo "</tr>";
}

有关Ternary Operator的更多信息。

答案 1 :(得分:1)

您也可以使用try/catch块或简单isset来确定在<td>中显示哪个值,其中包含startupDate值,如下所示:

    <?php
        //...
        while($datosPerfil = sqlsrv_fetch_array($resultado)){
            echo "<tr>";
            echo "<td>";
            echo $datosPerfil['CPR_Name'];
            echo "</td>";
            echo "<td>";
            echo $datosPerfil['CON_SC_Id'];
            echo "</td>";
            echo "<td>";
            echo $datosPerfil['CON_Tel_Number'];
            echo "</td>";
            echo "<td>";
            try{
                $startupDate    = $datosPerfil['CON_Startup_Date']->format("Y-m-d");
            }catch(Exception $e){
                // JUST SET A DEFAULT HERE, EVEN THE STRING "UNKNOWN" MIGHT BE OK ;-)
                $startupDate    = "2016-07-12";     
            }
            echo $startupDate;
            echo "</td>";
            echo "</tr>";
        }

使用isset()上面的代码变为:

    <?php
        //...
        while($datosPerfil = sqlsrv_fetch_array($resultado)){
            echo "<tr>";
            echo "<td>";
            echo $datosPerfil['CPR_Name'];
            echo "</td>";
            echo "<td>";
            echo $datosPerfil['CON_SC_Id'];
            echo "</td>";
            echo "<td>";
            echo $datosPerfil['CON_Tel_Number'];
            echo "</td>";
            echo "<td>";
            // JUST SET A DEFAULT HERE, EVEN THE STRING "UNKNOWN" MIGHT BE OK ;-)
            $startupDate = isset($datosPerfil['CON_Startup_Date']) ? $datosPerfil['CON_Startup_Date']->format("Y-m-d") : "2016-07-12";
            echo $startupDate;
            echo "</td>";
            echo "</tr>";
        }

答案 2 :(得分:-1)

试试这段代码。希望这段代码可能对您有所帮助。

$result=$datosPerfil['CON_Startup_Date']->format("Y-m-d");
if ($result != null) {
  echo $result;
} else { // format failed
  echo "null";
}