PHP foreach()-MySQLi查询中的参数无效?

PHP foreach()-MySQLi查询中的参数无效?,php,arrays,Php,Arrays,我正在努力处理我的mysqli查询数组。我正在从数据库中查询日志案例引用号,需要检查是否有任何引用具有包含任何文件的相同引用号的文件夹。如果是,我必须scandir文件夹内容,并通过$mail->AddAttachment()将每个文件附加到邮件中 这是一个简单的代码,我在网站的其他部分也使用它,但在这里,它在尝试读取数组时抛出了一个无效参数错误 PHP:- //查询过去24小时内提交的记录 $sql=“按LogID从qci\U dmlog\U数据组中选择LogID”; $result=$mys

我正在努力处理我的
mysqli
查询数组。我正在从数据库中查询日志案例引用号,需要检查是否有任何引用具有包含任何文件的相同引用号的文件夹。如果是,我必须
scandir
文件夹内容,并通过
$mail->AddAttachment()
将每个文件附加到邮件中

这是一个简单的代码,我在网站的其他部分也使用它,但在这里,它在尝试读取数组时抛出了一个
无效参数
错误

PHP:-

//查询过去24小时内提交的记录
$sql=“按LogID从qci\U dmlog\U数据组中选择LogID”;
$result=$mysqli->query($sql)或die(“从qci_dmlog_数据表获取数据的查询失败:”。mysqli_错误($mysqli)。“

”; //定义附件文件夹的路径 $log_folder=“../attachments/”; 而($row=$result->fetch_数组(MYSQLI_ASSOC)){ 打印($row['LogID']); foreach($row['LogID']作为$case){ //检查是否存在具有案例引用的文件夹 如果(文件存在($log\u folder.$case)){ $files=scandir($log\u folder.$case); $n=1; //忽略.和..文件夹 foreach($files作为$file){ 如果(在数组中($file,array(“.”,“.”))继续; //仅获取文件扩展名并重命名文件名 $extension=pathinfo($file,pathinfo\u扩展名); $newName=str_replace($file,$n..$extension,$file); 重命名($log_folder.$case./“$file,$log_folder.$case./“$newName); //附加到电子邮件 $mail->addAttachment($log\u folder.$case./“$newName); echo“附件:$newName
”; $n++; } } } }
你知道我做错了什么吗


谢谢

因为$row['LogID']中只有一个值,所以参数无效。使用foreach循环,可以逐个元素遍历数组元素。因为您在while循环中,获取每个LogID,所以您可以删除foreach,因为在while循环中,每个循环只获得一个元素

这应该适合您:

// query records submitted within the last 24 hours
$sql = "SELECT LogID FROM qci_dmlog_data GROUP BY LogID";
$result = $mysqli->query($sql) or die('<p>Query to get data from qci_dmlog_data table failed: ' . mysqli_error($mysqli) . '</p>');

// define path to attachment folder
$log_folder = "../attachments/";


while ($row = $result->fetch_array(MYSQLI_ASSOC)) {

print($row['LogID']);

$case = $row['LogID'];

// check if folder with case reference exists or not
if (file_exists($log_folder.$case)) {
    $files = scandir($log_folder.$case);
    $n = 1;

    // ignore . and .. folders
    foreach($files as $file) {      //IS FILES AN ARRAY?
      if (in_array($file, array(".",".."))) continue;

      // get file extension and rename filename only
      $extension = pathinfo($file, PATHINFO_EXTENSION);
      $newName = str_replace($file,$n.'.'.$extension,$file);
      rename($log_folder.$case."/".$file, $log_folder.$case."/".$newName);

      // attach to email
      $mail->addAttachment($log_folder.$case."/".$newName);
      echo "Attachment: $newName<br>";
      $n++;      
  }
}

由于$row['LogID']中只有一个值,因此该参数无效。使用foreach循环,可以逐个元素遍历数组元素。因为您在while循环中,获取每个LogID,所以您可以删除foreach,因为在while循环中,每个循环只获得一个元素

这应该适合您:

// query records submitted within the last 24 hours
$sql = "SELECT LogID FROM qci_dmlog_data GROUP BY LogID";
$result = $mysqli->query($sql) or die('<p>Query to get data from qci_dmlog_data table failed: ' . mysqli_error($mysqli) . '</p>');

// define path to attachment folder
$log_folder = "../attachments/";


while ($row = $result->fetch_array(MYSQLI_ASSOC)) {

print($row['LogID']);

$case = $row['LogID'];

// check if folder with case reference exists or not
if (file_exists($log_folder.$case)) {
    $files = scandir($log_folder.$case);
    $n = 1;

    // ignore . and .. folders
    foreach($files as $file) {      //IS FILES AN ARRAY?
      if (in_array($file, array(".",".."))) continue;

      // get file extension and rename filename only
      $extension = pathinfo($file, PATHINFO_EXTENSION);
      $newName = str_replace($file,$n.'.'.$extension,$file);
      rename($log_folder.$case."/".$file, $log_folder.$case."/".$newName);

      // attach to email
      $mail->addAttachment($log_folder.$case."/".$newName);
      echo "Attachment: $newName<br>";
      $n++;      
  }
}

我假设
$row['LogID']
不是数组,而是字符串。因此,您需要首先从代码中删除
foreach()
,如下所示:-

while ($row = $result->fetch_array(MYSQLI_ASSOC)) {

$case = $row['LogID']);

      // check if folder with case reference exists or not
      if (file_exists($log_folder.$case)) {
        $files = scandir($log_folder.$case);
        $n = 1;

        // ignore . and .. folders
        foreach($files as $file) {      
          if (in_array($file, array(".",".."))) continue;

          // get file extension and rename filename only
          $extension = pathinfo($file, PATHINFO_EXTENSION);
          $newName = str_replace($file,$n.'.'.$extension,$file);
          rename($log_folder.$case."/".$file, $log_folder.$case."/".$newName);

          // attach to email
          $mail->addAttachment($log_folder.$case."/".$newName);
          echo "Attachment: $newName<br>";
          $n++;
        }
      }
}
while($row=$result->fetch_数组(MYSQLI_ASSOC)){
$case=$row['LogID']);
//检查是否存在具有案例引用的文件夹
如果(文件存在($log\u folder.$case)){
$files=scandir($log\u folder.$case);
$n=1;
//忽略.和..文件夹
foreach($files作为$file){
如果(在数组中($file,array(“.”,“.”))继续;
//仅获取文件扩展名并重命名文件名
$extension=pathinfo($file,pathinfo\u扩展名);
$newName=str_replace($file,$n..$extension,$file);
重命名($log_folder.$case./“$file,$log_folder.$case./“$newName);
//附加到电子邮件
$mail->addAttachment($log\u folder.$case./“$newName);
echo“附件:$newName
”; $n++; } } }

注意:-检查所有其他变量,如
$log\u folder
是否已设置并具有正确的值。谢谢我假设
$row['LogID']
不是数组,而是字符串。因此,您需要首先从代码中删除
foreach()
,如下所示:-

while ($row = $result->fetch_array(MYSQLI_ASSOC)) {

$case = $row['LogID']);

      // check if folder with case reference exists or not
      if (file_exists($log_folder.$case)) {
        $files = scandir($log_folder.$case);
        $n = 1;

        // ignore . and .. folders
        foreach($files as $file) {      
          if (in_array($file, array(".",".."))) continue;

          // get file extension and rename filename only
          $extension = pathinfo($file, PATHINFO_EXTENSION);
          $newName = str_replace($file,$n.'.'.$extension,$file);
          rename($log_folder.$case."/".$file, $log_folder.$case."/".$newName);

          // attach to email
          $mail->addAttachment($log_folder.$case."/".$newName);
          echo "Attachment: $newName<br>";
          $n++;
        }
      }
}
while($row=$result->fetch_数组(MYSQLI_ASSOC)){
$case=$row['LogID']);
//检查是否存在具有案例引用的文件夹
如果(文件存在($log\u folder.$case)){
$files=scandir($log\u folder.$case);
$n=1;
//忽略.和..文件夹
foreach($files作为$file){
如果(在数组中($file,array(“.”,“.”))继续;
//仅获取文件扩展名并重命名文件名
$extension=pathinfo($file,pathinfo\u扩展名);
$newName=str_replace($file,$n..$extension,$file);
重命名($log_folder.$case./“$file,$log_folder.$case./“$newName);
//附加到电子邮件
$mail->addAttachment($log\u folder.$case./“$newName);
echo“附件:$newName
”; $n++; } } }

注意:-检查所有其他变量(如
$log\u folder
)是否已设置并具有正确的值。谢谢

出现了哪些错误?@Anant它会输出正确的LogID,但同时抛出一个
警告:为中的foreach()提供的参数无效error@C0dekid它输出正确的LogID编号,但仍然抛出无效参数error@Armitage2k
$row['LogID']
是数组吗?我不这么认为so@Armitage2k
$case=$row['LogID']
然后仅删除第一个foreach。就这样,并检查您得到的错误是什么?@Anant它输出正确的LogID,但同时抛出一个
警告:为中的foreach()提供的参数无效error@C0dekid它输出正确的LogID编号,但仍然抛出无效参数error@Armitage2k
$row['LogID']
是数组吗?我不这么认为so@Armitage2k
$case=$row['LogID']然后仅删除第一个foreach。仅此而已,并选中Armitage2k乐于帮助您:):)Armitage2k乐于帮助您:):)