我正在查看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。猜猜我可以称之为固定但尚未解决。