【问题标题】:Php explode error with date and time日期和时间的PHP爆炸错误
【发布时间】:2014-06-04 13:33:13
【问题描述】:

我已将我的数据库从 mysql 转换为 SQL server,并且正在处理爆炸性的日期和时间。我收到错误:explode() expects parameter 2 to be string, 这是代码:

while($r = sqlsrv_fetch_array  ($sth)) 
    {

        //$temp = array();
        // assumes dates are in the format "yyyy-MM-dd"

        $dateString = $r['date'];
        $dateArray = explode('-', $dateString);
        $year = $dateArray[0];
        $month = $dateArray[1] - 1; // subtract 1 to convert to javascript's 0-indexed months
        $day = $dateArray[2];

        var_dump($dateString);

        // assumes time is in the format "hh:mm:ss"
        $timeString = $r['time'];
        $timeArray = explode(':', $timeString);
        $hours = $timeArray[0];
        $minutes = $timeArray[1];
        $seconds = $timeArray[2];

        var_dump($timeString);

        $temp = array();
        $temp[] = array('v' => "Date($year, $month, $day, $hours, $minutes, $seconds)"); 
        $temp[] = array('v' => $r['Temperatur']);


        $rows[] = array('c' => $temp);

    } 

当我对我得到的变量 $dateString 和 $timeString 执行 var_dump 时,第一个显示 dateString 和第二个 timeString( PS:在我的 SQL 服务器中,日期保存为日期,时间保存为类型 (0):

这是我对我的mysql数据库执行此操作时的样子,正确:

【问题讨论】:

  • 尝试调试$dateString$timeString
  • 检查 $dateString 和 $timeString === null
  • 显示完整的 PHP 代码..
  • 更新了,我把这两个变量的var_dump贴出来。
  • 这是我在做 DateString 和 TimeString 的 var_dump 时得到的:dropbox.com/s/i9af32bj9mkfsp3/error.png

标签: php sql sql-server explode


【解决方案1】:

您没有正确检查查询结果。

如果explode的第二个参数被标记为无字符串,那肯定是无字符串。

因此:您的 sql 似乎无法在 PHP 脚本的上下文中工作,尽管它是正确的 SQL。

检查您的 $conn 变量是否正确连接

dump sqlsrv 错误如:

$sth = sqlsrv_query($conn,"

SELECT routines.date, routines.time, 
SUM( CASE WHEN measurements.title =  'T_Luft_Temperatur' THEN CAST( REPLACE( routines.value,  ',',  '.' ) AS DECIMAL( 18, 2 ) ) ELSE NULL END) AS Temperatur
FROM routines
INNER JOIN measure_routine ON routines.id = measure_routine.routine_id
INNER JOIN measurements ON measure_routine.measure_id = measurements.id
INNER JOIN pools ON measure_routine.pool_id = pools.id
GROUP BY routines.date, routines.time
ORDER BY routines.date, routines.time;

;");

if( $sth === false ) {
     die( print_r( sqlsrv_errors(), true));
}

已编辑

从您上次编辑开始,图像(为什么是图像?)显示以下错误消息:

explode() 期望参数 2 是字符串,object given in ...

这意味着您的变量 $dateString = $r['date']; 是一个 DateTime 对象。 最后你不需要分解它,因为你可以通过这个对象的 getter 访问成员:

$dateObj = $r['date'];
$year = $dateObj->format('Y');

【讨论】:

    【解决方案2】:

    试试这个:

    explode(":", $r['time']->format("H:i:s"));
    

    【讨论】:

    • 不需要,因为可以直接访问成员。不需要像 Object => formatted string => array => members 这样的两遍转换 ...
    【解决方案3】:

    试试这个,

         $time = date('H:i:s'); 
         $date = date('Y-m-d');
         echo $time."<br>";
         echo $date."<br>";
         $pieces = explode(":", $time);
         echo $pieces[0]." ".$pieces[1]." ".$pieces[2]."<br>";
         $pieces = explode("-", $date);
         echo $pieces[0]." ".$pieces[1]." ".$pieces[2];
    

    【讨论】:

    • $dateStringDateTime 对象,而不是字符串。
    猜你喜欢
    • 2023-03-12
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多