Php sql循环只返回一个结果
我正在做一个三重循环来在数组(dataArray[])上插入值Php sql循环只返回一个结果,php,mysql,arrays,loops,Php,Mysql,Arrays,Loops,我正在做一个三重循环来在数组(dataArray[])上插入值 第一,寻找工人 第二个是一周中每一天的“for” 最后一个是看这个人今天是否工作 我不知道为什么它只显示一个结果。。。。 如果我更改顺序(第一个$sql),它会显示另一个条目 // display loop $sql = "SELECT workers.id, workers.surname, workers.name FROM workers,
- 第一,寻找工人
- 第二个是一周中每一天的“for”
- 最后一个是看这个人今天是否工作李>
// display loop
$sql = "SELECT workers.id, workers.surname, workers.name
FROM workers,employment_contract
WHERE employment_contract.fk_company_teams_id='".$teamID."'
AND employment_contract.fk_workers_id=workers.id
AND employment_contract.initial_date<'".$beginingDate."'
AND (employment_contract.final_date>".$beginingDate."
OR employment_contract.final_date='0000-00-00-00:00:00')
ORDER BY workers.surname ASC";
$stmt = $db->prepare($sql);
$i=-1;
$dataArray;
if($stmt->execute()){
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$i++;
// datas in array
$nameInitial = substr($row['name'], 0, 1).'.';
// inserting worker name on array
$dataArray[$i]['workerName']=$nameInitial.' '.$row['surname'];
$workerID = $row['id'];
$totalTime = new DateTime('0000-00-00 00:00:00');
for($j=0;$j<7;$j++){
// changing the current date
$incrementation = 'P'.$j.'D';
$currentDate = date_create($beginingDate);
$currentDate->add(new DateInterval($incrementation));
$currentDate = date_format($currentDate, 'Y-m-d');
// sql search for daily timesheet
$sql = "SELECT initial_date,final_date
FROM working_days
WHERE fk_workers_id='".$workerID."'
AND (initial_date >='".$currentDate." 00:00:00.000')
AND (final_date <='".$currentDate." 23:59:59.999')
ORDER BY id ASC";
$stmt = $db->prepare($sql);
$k=1;
if($stmt->execute()){
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
// formatting date for calculation
$time1 = utf8_encode(strftime("%R",strtotime("$row[initial_date]")));
$time2 = utf8_encode(strftime("%R",strtotime("$row[final_date]")));
$initialDate = new DateTime(date($row['initial_date']));
$finalDate = new DateTime(date($row['final_date']));
$time3 = $initialDate->diff($finalDate);
$timeFormatted = $time3->format('%H:%I');
$totalTime->add($time3);
// setting the day to implement
if($j==0){$day = 'monday';}
if($j==1){$day = 'tuesday';}
if($j==2){$day = 'wednesday';}
if($j==3){$day = 'thursday';}
if($j==4){$day = 'friday';}
if($j==5){$day = 'saturday';}
if($j==6){$day = 'sunday';}
$arrayBox = $day.$k;
// inserting day value on array
$dataArray[$i][$arrayBox] = $time1.' '.$time2.' <b>'.$timeFormatted.'</b></div><br>';
unset($time1);
unset($time2);
$k++;
}
}
}
$totalTimeFormatted = $totalTime->format('H:i');
// inserting holidays value on array
$dataArray[$i]['holidays'] = 'Vac';
// inserting sum value on array
$dataArray[$i]['sum'] = $totalTimeFormatted;
// if no timesheet is found for the worker we don't show anything
if($totalTimeFormatted==='00:00'){
unset($dataArray[$i]);
}
unset($totalTime);
}
}
//显示循环
$sql=“选择workers.id、workers.name、workers.name
来自工人、就业和合同
其中employment_contract.fk_company_teams_id=“$teamID.”
和就业合同.fk_workers_id=workers.id
和雇佣合同。初始日期“$beginingDate”
或雇佣合同。最终日期(0000-00-00-00:00:00')
工人订单。姓ASC”;
$stmt=$db->prepare($sql);
$i=-1;
$dataArray;
如果($stmt->execute()){
而($row=$stmt->fetch(PDO::fetch\U ASSOC)){
$i++;
//数组中的数据
$nameInitial=substr($row['name'],0,1)。”;
//在阵列上插入工作程序名称
$dataArray[$i]['workerName']=$nameInitial.'.$row['name'];
$workerID=$row['id'];
$totalTime=新日期时间('0000-00-00:00:00');
对于($j=0;$jadd(新日期间隔($incrementation));
$currentDate=date_格式($currentDate,'Y-m-d');
//sql搜索每日时间表
$sql=“选择初始日期、最终日期
从工作日开始
其中fk_workers_id=“$workerID.”
和(初始日期>='“$currentDate.”00:00:00.000')
并且(final_date正如评论中提到的,我对sql语句$stmt使用了相同的变量名
对于第三个循环,我将其更正为$stmt1,并且它正在工作。您重写了$stmt
变量,这也破坏了SQL调用和$row。