我有一个奇怪的问题,在使用php脚本将.xlsx文件导入mysql数据库时。
excel文件是从另一个oracle db服务器生成的,正在我的服务器上复制。除非我手动
,否则脚本不会插入任何记录这很奇怪,因为我没有对文件进行任何更改,也没有任何更改。我已经在保存文件之前和之后比较了文件权限,但没有任何变化。
对于excel文件,我在当前服务器上创建工作正常,没有任何麻烦。
数据库文件
// 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>
我正在使用here中的simplexlsx.class.php类
答案 0 :(得分:0)
我想,问题出现了,因为我们没有在oracle服务器上安装MS Office / Excel,从那里生成excel文件。
xlsx文件可以将其单元格数据存储在&#34;内联字符串&#34; 或&#34;共享字符串&#34; (我从记忆中想出这些术语)。一些 库假设/支持只有一个而不支持另一个,Excel可能是 &#34;定影&#34;打开,保存和关闭时的文件 - 它非常糟糕 事实上,这样做。我不熟悉这个php库,但是 我强烈怀疑这在某种程度上是相关的。 - 迈克尔 - sqlbot 12 小时前
因此,在执行此脚本之前,我配置了一个bot脚本(使用AutoIT)来打开所有excel文件并保存它们。
如果有人知道任何更好的解决方法,那么请提及它。感谢。