我正在关注本教程:https://itsolutionstuff.com/post/php-import-excel-file-into-mysql-database-tutorialexample.html
它使用以下库:https://github.com/nuovo/spreadsheet-reader
大多数代码似乎都可以工作。我创建了一个页面,您可以在其中选择计算机中的文件并“上传”它。然后,我们在页面上的文件中创建一个数据表。
问题出在最后也是最重要的功能上:将数据导入本地MySQL数据库。
我的连接看起来像这样:
<?php
$servername = "localhost";
$dbname = "analyse";
$password = "";
$username = "root";
$mysqli = new mysqli("localhost", "root", "", "analyse");
?>
我正在使用没有密码的root帐户。该数据库称为“分析”。我们将要导入数据的表称为“测试”。我尝试使用创建的另一个帐户使用用户名“ import”和密码“ 123”,但也没有任何结果。
其余的PHP脚本如下所示:
<?php
require('library/php-excel-reader/excel_reader2.php');
require('library/SpreadsheetReader.php');
require('db_config.php');
if(isset($_POST['Submit'])){
$ok = 1;
$mimes = ['application/vnd.ms-excel','text/xls','text/xlsx','application/vnd.oasis.opendocument.spreadsheet'];
if($ok = 1); {
$uploadFilePath = 'uploads/'.basename($_FILES['file']['name']);
move_uploaded_file($_FILES['file']['tmp_name'], $uploadFilePath);
$Reader = new SpreadsheetReader($uploadFilePath);
$totalSheet = count($Reader->sheets());
echo "Du har ".$totalSheet." regneark".
$html="<table border='1'>";
$html.="<tr>
<th>Account Number</th>
<th>forstelisten</th>
<th>andrelisten</th>
<th>Account</th>
</tr>";
/* For Loop for all sheets */
for($i=0;$i<$totalSheet;$i++){
$Reader->ChangeSheet($i);
foreach ($Reader as $Row)
{
$html.="<tr>";
$accountnumber = isset($Row[0]) ? $Row[0] : '';
$forstelisten = isset($Row[1]) ? $Row[1] : '';
$andrelisten = isset($Row[2]) ? $Row[2] : '';
$account = isset($Row[3]) ? $Row[3] : '';
$html.="<td>".$accountnumber."</td>";
$html.="<td>".$forstelisten."</td>";
$html.="<td>".$andrelisten."</td>";
$html.="<td>".$account."</td>";
$html.="</tr>";
$query = "
INSERT INTO test(Account Number, forstelisten, andrelisten, Account)
VALUES('".$accountnumber."','".$forstelisten."','".$andrelisten."','".$account."')";
$mysqli->query($query);
}
}
$html.="</table>";
echo $html;
echo "<br />Data lagt inn i databasen.";
}
}
?>
运行此命令后,我得到了表,工作表计数和最后的消息,但MySQL数据库中没有任何显示,也没有错误消息。
我们要导入到(测试)的表具有四个冒号:帐号,forstelisten和andrelisten,Account。他们都是int。我们尝试导入的xlsx文件称为test。它包含四个冒号和三行。所有这些单元格中都只有数字(数字从1到300,无小数)。
MySQL数据库正在WAMP服务器上运行。 PHP版本是7.1.9。 MySQL版本是5.7.19。
请询问是否需要更多信息,谢谢您的帮助。
编辑:
现在可以使用了!谢谢大家。
工作代码如下:
<?php
require('library/php-excel-reader/excel_reader2.php');
require('library/SpreadsheetReader.php');
require('db_config.php');
if(isset($_POST['Submit'])){
$ok = 1;
$mimes = ['application/vnd.ms-excel','text/xls','text/xlsx','application/vnd.oasis.opendocument.spreadsheet'];
if($ok == 1); {
$uploadFilePath = 'uploads/'.basename($_FILES['file']['name']);
move_uploaded_file($_FILES['file']['tmp_name'], $uploadFilePath);
$Reader = new SpreadsheetReader($uploadFilePath);
$totalSheet = count($Reader->sheets());
echo "Du har ".$totalSheet." regneark".
$html="<table border='1'>";
$html.="<tr>
<th>Account Number</th>
<th>forstelisten</th>
<th>andrelisten</th>
<th>Account</th>
</tr>";
/* For Loop for all sheets */
for($i=0;$i<$totalSheet;$i++){
$Reader->ChangeSheet($i);
foreach ($Reader as $Row)
{
$html.="<tr>";
$accountnumber = isset($Row[0]) ? $Row[0] : '';
$forstelisten = isset($Row[1]) ? $Row[1] : '';
$andrelisten = isset($Row[2]) ? $Row[2] : '';
$account = isset($Row[3]) ? $Row[3] : '';
$html.="<td>".$accountnumber."</td>";
$html.="<td>".$forstelisten."</td>";
$html.="<td>".$andrelisten."</td>";
$html.="<td>".$account."</td>";
$html.="</tr>";
$query = "
INSERT INTO `analyse`.`test`(`Account Number`, `forstelisten`, `andrelisten`, `Account`)
VALUES('$accountnumber','$forstelisten','$andrelisten','$account')";
$mysqli->query($query);
}
}
$html.="</table>";
echo $html;
echo "<br />Data lagt inn i databasen.";
}//else {
//die("<br/>Sorry, File type is not allowed. Only Excel file.");
//}
}
?>
答案 0 :(得分:2)
我认为您的列名(帐号)用两个词表示,因此请尝试对如下所示的不合格字段名使用反引号,并使用($ ok == 1)更改条件($ ok = 1)
$query = "INSERT INTO test(`Account Number`, forstelisten, andrelisten, Account) VALUES ('".$accountnumber."','".$forstelisten."','".$andrelisten."','".$account."')";