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乐于帮助您:):)