使用 php 在 mysql 上插入 Excel 数据



我正在尝试使用 php 在 mysql 中插入 excel 数据,我有一个代码,但它只插入了存档的第一行,我的存档有 3 行。

有人知道如何帮助我吗?

public function incluirLote()
{
if (!empty($_FILES['arquivo']['tmp_name'])) {
$arquivo = new DOMDocument;
$arquivo->load($_FILES['arquivo']['tmp_name']);
$linhas = $arquivo->getElementsByTagName("Row");
$countlinha = 1;
foreach ($linhas as $linha) {
if ($countlinha > 1) {
$nome = $linha->getElementsByTagName("Data")->item(0)->nodeValue;
echo "Nome: $nome <br>";
$email = $linha->getElementsByTagName("Data")->item(1)->nodeValue;
echo "E-mail: $email <br>";
$niveis_acesso_id = $linha->getElementsByTagName("Data")->item(2)->nodeValue;
echo "Nivel de Acesso: $niveis_acesso_id <br>";
echo "<hr>";

$conn = $this->connect();
$sql = "insert into usu (nome, email, niveis_acesso_id)  VALUES (:nome, :email, :niveis_acesso_id) ";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':nome', $nome);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':niveis_acesso_id', $niveis_acesso_id);
$stmt->execute();
return $stmt;
}
$countlinha++;
}
}
}

您的脚本发生以下情况:

您设置$countlinha = 1;

这意味着条件if ($countlinha > 1)foreach($linhas as $linha)的第一次迭代时false,即$linhas内的第一个"记录"不会被处理。

然后你递增$countlinha++;它变成2

因此,在第二次迭代foreach($linhas as $linha)时,将执行if ($countlinha > 1)中的代码。

$linhas中的第二个"记录"被回显并写入数据库。

但是,return $stmt;现在会终止脚本。

总而言之,您只处理了一个"记录"。

TLDR

如果你想让里面的所有"记录"$linhas处理,你应该删除if ($countlinha > 1)条件,不要return在循环内,因为它会提前终止你的脚本。

最新更新