Использование PHPEXCEL с SQLSRV
Я ищу способ получения предварительно определенного шаблона заказа (XLSX), который мой клиент заполняет и загружает, который затем использует PHP Excel для вставки данных в мою базу данных sql.
У меня это нормально работает с использованием MySQL, но действительно нужно, чтобы он работал с сервером SQL, так как наша база данных (которая предшествует мне) является сервером SQL.
Код, который я использую для MySQL:
if(isset($_POST['submit'])) {
if(isset($_FILES['uploadFile']['name']) && $_FILES['uploadFile']['name'] != "") {
$allowedExtensions = array("xls","xlsx");
$ext = pathinfo($_FILES['uploadFile']['name'], PATHINFO_EXTENSION);
if(in_array($ext, $allowedExtensions)) {
$file_size = $_FILES['uploadFile']['size'] / 1024;
if($file_size < 50) {
$file = "uploads/".$_FILES['uploadFile']['name'];
$isUploaded = copy($_FILES['uploadFile']['tmp_name'], $file);
if($isUploaded) {
include("db.php");
include("Classes/PHPExcel/IOFactory.php");
try {
//Load the excel(.xls/.xlsx) file
$objPHPExcel = PHPExcel_IOFactory::load($file);
} catch (Exception $e) {
die('Error loading file "' . pathinfo($file, PATHINFO_BASENAME). '": ' . $e->getMessage());
}
//An excel file may contains many sheets, so you have to specify which one you need to read or work with.
$sheet = $objPHPExcel->getSheet(0);
//It returns the highest number of rows
$total_rows = $_POST["xNum"]+1;
//It returns the highest number of columns
$highest_column = $sheet->getHighestColumn();
echo '<div class="container-fluid">';
echo '<h4 style="margin-top: 40px;">Data from Excel file</h4>';
echo '<table cellpadding="5" cellspacing="1" border="1" class="table table-striped table-bordered table-sm table-hover">';
$query = "insert into `tblorderitems` (`Vehicle`, `DriveTrain`, `Product`, `otherProduct`, `Price`, `RegNo`, `StockNo`, `ChassisNo`, `CommNo`, `PartNo`, `InStockDate`, `PlannedDate`) VALUES ";
//Loop through each row of the worksheet
for($row =2; $row <= $total_rows; $row++) {
//Read a single row of data and store it as a array.
//This line of code selects range of the cells like A1:D1
$single_row = $sheet->rangeToArray('A' . $row . ':' . $highest_column . $row, NULL, TRUE, FALSE);
echo "<tr>";
//Creating a dynamic query based on the rows from the excel file
$query .= "(";
//Print each cell of the current row
foreach($single_row[0] as $key=>$value) {
echo "<td>".$value."</td>";
$query .= "'".mysqli_real_escape_string($con, $value)."',";
}
$query = substr($query, 0, -1);
$query .= "),";
echo "</tr>";
}
$query = substr($query, 0, -1);
echo '</table>';
// At last we will execute the dynamically created query an save it into the database
mysqli_query($con, $query);
if(mysqli_affected_rows($con) > 0) {
echo '<script> alert("Order Added");</script>';
} else {
echo '<script> aleft("Can\'t update database table! try again"); </script>';
}
// Finally we will remove the file from the uploads folder (optional)
unlink($file);
} else {
echo '<script> alert("File not uploaded"); </script>';
}
} else {
echo '<script> alert("Maximum file size should be 50kb"); </script>';
}
} else {
echo '<script> alert("Incorrect File Type"); </script>';
}
} else {
echo '<script> alert("Select an XLSX File First"); </script>';
}
}
echo '</div>';
?>
Кто-нибудь есть идеи, что я хотел бы изменить, чтобы заставить это работать с sqlsrv?
Спасибо Дэвид
0 ответов
Вам просто нужно заменить вызовы на чистые функции mysqli.
замещать mysqli_query
с sqlsrv_query
замещать mysqli_affected_rows
с sqlsrv_rows_affected
замещать mysqli_real_escape_string
с вашей собственной функцией mssql_escape
:
function mssql_escape($data) {
if(is_numeric($data))
return $data;
$unpacked = unpack('H*hex', $data);
return '0x' . $unpacked['hex'];
}