我在使用php脚本将.xlsx文件导入到mysql数据库时遇到了一个奇怪的问题。
excel文件是从另一个oracle数据库服务器生成的,并且正在我的服务器上复制。脚本不会插入任何记录,除非,我手动
- 打开文件
- 保存它,然后
- 关闭它
这很奇怪,因为我没有对文件进行任何更改,根本没有更改。我已经比较了保存文件前后的文件权限,没有任何更改。
对于excel文件,我在当前服务器上创建的文件运行良好,没有任何麻烦。
DB文件
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
else{
echo "Connection Made Succesfully !!!";
}
?>
代码样本
<?php
include 'db.php';
if (isset($_FILES['file'])) {
IF($_POST["TotalCol"] && $_POST["TableName"])
{
require_once "simplexlsx.class.php";
$xlsx = new SimpleXLSX( $_FILES['file']['tmp_name'] );
list($cols, $rows) = $xlsx->dimension();
foreach( $xlsx->rows() as $k => $r)
{ // loop through excel worksheet
$sub = mysql_escape_string($r[0]);
for ($x = 1; $x < $_POST["TotalCol"]; $x++) {
$sub .= "','".mysql_escape_string($r[$x]);
}
//$sub = mysql_escape_string($r[0])."','" . mysql_escape_string($r[1]);
//$q = "insert into test2 value('" . mysql_escape_string($r[0])."','" . mysql_escape_string($r[1])."','" . mysql_escape_string($r[2]) . "');";
$q = "insert into ".$_POST["TableName"]." value('" . $sub . "');"
if ($conn->query($q) === TRUE) {
echo "New record created successfully";
} else {
echo "<br>// Error: " . $sql . "<br>" . $conn->error . "<br>";
}
} // IF ENDS HERE
}
}
?>
<h1>Upload</h1>
<form method="post" enctype="multipart/form-data">
*.XLSX <input type="file" name="file" /></br><input type="Text" name="TableName" class="TableName" placeholder="TableName" /></br><input type="Text" name="TotalCol" class="TotalCol" placeholder="Total Columns" /> <input type="submit" value="Insert" />
</form>
我在这里使用simplexlsx.class.php类
我想,出现这个问题是因为我们在oracle服务器上没有安装MS Office/Excel,Excel文件就是从那里生成的。
xlsx文件的单元格数据可以存储在"内联字符串"中或者"共享字符串"(我根据记忆想出这些术语)。一些库假定/只支持一个而不支持另一个,Excel可能在打开、保存和关闭文件时"修复"文件--这真的很糟糕关于做那件事,事实上。我不熟悉这个php库,但是我强烈怀疑这在某种程度上是相关的Michael-sqlbot 12小时前
因此,我正在配置一个机器人程序脚本(使用AutoIT),以便在执行该脚本之前打开并保存所有excel文件。
如果有人知道更好的解决方法,请一定要提出来。谢谢。