IE9上的CSV文件生成问题

时间:2014-09-15 14:38:30

标签: php mysql internet-explorer csv pdo

我正在查看Internet Explorer 9的一个奇怪问题。以下代码在Safari,IE8,IE10,IE11,Chrome和Firefox中运行时会成功生成填充的CSV文件,但会生成一个空的CSV文件(仅限标题) IE9。考虑到错误似乎只发生在IE9中,它似乎不是一个数据问题。我已经能够在运行IE9的3台不同机器上进行测试和确认。

这是我用SQLSRV而不是MSSQL PDO继承的遗留脚本,尽管我冒昧地挖出了mysql并将其替换为PDO并将其包装在一个函数中并彻底评论它是为了我自己的理智。

        # Create a CSV sheet with details we need
    # Generate file name based on timestamp
    $file = "$_SESSION[user_name]_" . "tutorincomplete_" . date("Y-m-d_H-i-sa");

    # 1: Open CSV File 
    $myFile = ".\csv\\" . "$file.csv"; 
    $fh = fopen($myFile, 'w') or die("can't open file"); 

    # Get list of active classes from MSSQL DB
    $sql = "SELECT DISTINCT 
    static_title, 
    LEFT(CONVERT(VARCHAR, course_end_date, 120), 150) AS course_end_date, 
    RTRIM(static_code) as static_code, 
    RTRIM(session_code) as session_code,
    staff_name
    FROM 
    snip";

        # Append to query where a school is present
        if (ISSET($_SESSION['user_school']) AND $_SESSION['user_school'] != "None")
        {
        $sql .= "
        WHERE
        school = ?
        ORDER BY staff_name ASC";   
        $params1 = array($_SESSION['user_school']);
        $query = sqlsrv_query($conn, $sql, $params1);
        }
        else
        {
        if (isset($_POST['school']) AND $_POST['school'] != "All") {
        $sql .= "
        WHERE
        school = ?
        ORDER BY staff_name ASC";   
        $params1 = array($_POST['school']);
        $query = sqlsrv_query($conn, $sql, $params1);
        } else {
        $sql .= "
        ORDER BY staff_name ASC";   
        $query = sqlsrv_query($conn, $sql);
        }

        }

        $today = date('U'); 

        # Set headers for CSV file
        $head = array("Static title", "Course end date", "Static code", "Session code", "Staff name");
        fputcsv($fh, $head);
        $count = 0;

            # Loop through MSSQL results for comparison
            while ($obj = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC))
            {

                $finish = $obj['course_end_date'];
                # Strip the time (keep ISO date format intact)
                $finishSub = substr($finish, 0, 10);

                # Create timestamp from date format
                $finishTs = strtotime($finishSub);

                # Compare and display <option> tag if valid
                if ($today > ($finishTs - 604800))
                {

                    # Fetch information on course; Decide of course is complete or incomplete
                    # To do this, first check for course entries in the MySQL database
                    # If they are present, we will use MySQL instead of MSSQL (To reference completed courses)
                    $sql3 = "SELECT * FROM snip WHERE static = :stc AND session = :sec ORDER BY static ASC";
                    $query3 = $pdo->prepare($sql3);
                    $query3->bindParam(':stc', $obj['static_code']);
                    $query3->bindParam(':sec', $obj['session_code']);
                    $query3->execute();
                    $rowCount = $query3->rowCount();


                    # Check for result count in MySQL
                    if ($rowCount > 0)
                    {
                    $result = $query3->fetch(PDO::FETCH_OBJ);

                        if ($result->complete == 0) {
                        $incomplete = 1;
                        } else {
                        $incomplete = 0;
                        $count++;
                        }

                    } else {
                        # No MySQL entry; Mark as incomplete
                        $incomplete = 1;
                    }

                        if ($incomplete > 0)
                        {
                        $arr = array($obj['static_title'], $obj['course_end_date'], $obj['static_code'], $obj['session_code'], $obj['staff_name']);
                        fputcsv($fh, $arr);
                        }

                }

            }

    echo "
    <h1>CSV file generation complete</h1>
    <p>Skipped $count classes</p>
    <p>File generation complete. File name $file.csv <a href=\"./csv/$file.csv\">Click here to open</a></p>";
    }

除IE9外,它生成“Skipped X classes”,CSV文件有x个条目。

但是在IE9中,“Skipped 0 classes”,CSV文件只包含列标题。

编辑:我通过一些实验发现SQLSRV在IE9中传递一个空数组 ONLY 。它不会影响任何其他浏览器。因此,我能够强调我需要将系统切换到MSO的PDO。猜猜我可以称之为固定但尚未解决。

0 个答案:

没有答案