在 while 循环内进行 mysql 查询,跳过循环中的项目

问题描述 投票:0回答:1

我正在读取 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
循环,但我不知道为什么以及如何让它工作......

任何帮助将不胜感激!

php mysqli
1个回答
0
投票

正如@ADyson所指出的,问题在于变量

$row
的使用。

在读取 CSV 文件的外部

while
循环的顶部,我们获取第一行数据,然后递增
$row
。 (大概在循环开始之前它被初始化为零)。如果
$row
等于 1,我们会跳过并从 CSV 文件中获取第二行。

再次递增后,

$row
现在等于2,所以我们不跳过。

稍后在循环中,我们使用

mysqli_fetch_row()
从数据库中获取行并将值存储在 ....
$row
!当数据库获取循环完成时,
$row
现在等于 null。

我们现在再次循环到 CSV 读取循环,获取第三行并递增

$row
。但它是 null,所以现在 PHP 强制它为数字(零)并将其递增到等于 1。这意味着该 CSV 行将被跳过。

此模式会重复,这意味着您将跳过每个奇数行。

这是一种冗长的说法,表示不要对两个不同的作业使用相同的变量。

© www.soinside.com 2019 - 2024. All rights reserved.