Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php sql循环只返回一个结果_Php_Mysql_Arrays_Loops - Fatal编程技术网

Php sql循环只返回一个结果

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,

我正在做一个三重循环来在数组(dataArray[])上插入值

  • 第一,寻找工人
  • 第二个是一周中每一天的“for”
  • 最后一个是看这个人今天是否工作
我不知道为什么它只显示一个结果。。。。 如果我更改顺序(第一个$sql),它会显示另一个条目

            // 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。