我正在读取 CSV 文件,对于每一行,我想查询数据库,但由于某种原因,循环每次都会跳过一行。一开始我以为是查询太长了,所以加了
mysqli_reap_async_query
来屏蔽代码,但是问题依旧...
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
if ($row == 1) {
continue;
}
if ($num == 7) {
$utilisateur = $data[0];
$arrivee = $data[1];
$depart = $data[2];
$commentaire = $data[3];
$projet = $data[4];
$code = $data[5];
$machine = $data[6];
$query = "SELECT id, nom, prenom FROM `utilisateurs` WHERE mail = '$utilisateur'";
mysqli_query($conn, $query, MYSQLI_ASYNC);
$res = mysqli_reap_async_query($conn);
while ($row = mysqli_fetch_row($res)) {
echo "<br>" . $row[0] . " " . $row[1] . " " . $row[2] . "<br>";
}
}
问题似乎来自
mysqli_fetch_row
循环,但我不知道为什么以及如何让它工作......
任何帮助将不胜感激!
正如@ADyson所指出的,问题在于变量
$row
的使用。
在读取 CSV 文件的外部
while
循环的顶部,我们获取第一行数据,然后递增 $row
。 (大概在循环开始之前它被初始化为零)。如果 $row
等于 1,我们会跳过并从 CSV 文件中获取第二行。
再次递增后,
$row
现在等于2,所以我们不跳过。
稍后在循环中,我们使用
mysqli_fetch_row()
从数据库中获取行并将值存储在 .... $row
!当数据库获取循环完成时,$row
现在等于 null。
我们现在再次循环到 CSV 读取循环,获取第三行并递增
$row
。但它是 null,所以现在 PHP 强制它为数字(零)并将其递增到等于 1。这意味着该 CSV 行将被跳过。
此模式会重复,这意味着您将跳过每个奇数行。
这是一种冗长的说法,表示不要对两个不同的作业使用相同的变量。