쿼리결과 반환 질문

쿼리결과 반환 질문

QA

쿼리결과 반환 질문

본문

여러 고수님들이 도움주신대로 해봐도 도통 모르겠습니다..

오류 메세지 출력해 보면

db에 저장이 되든 안되든  쿼리실패라고 계속 나옵니다

 

그래서 계속 data3 값이 반환되고 있습니다. ㅜㅜ

 

insert 성공시    data1 값을

        실패시    data3 값을

update 성공시  date2 값을

        실패시    data3 값을

반환받고 싶습니다.

 

혹시 함수안에 

쿼리문이 여러개가 적용이 되어서..

안되는 걸까요?

 

좀 길지만 php 파일 전체 올려드립니다.

검토좀 부탁 드립니다.

 

 

 


<?php
$conn = mysqli_connect("localhost", "*****", "*****", "*****");
function executeQuery($conn, $sql) {
    if (mysqli_query($conn, $sql)) {
        return true; // 쿼리 성공 시 true 반환
    } else {
        echo "에러: " . $sql . "<br>" . mysqli_error($conn);
        return false; // 쿼리 실패 시 false 반환
    }
}
$ch = curl_init();
$url = 'http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getRestDeInfo'; /*URL*/
$ss = date('Y');
$ss1 = date('m');
$queryParams = '?' . urlencode('serviceKey') . '=XOF2kmoeLs09B60ccCpdjBDu1aTUM9RQRyLfgJPxV3Z0TPmpnj1NtbwTssTQxLVHMqo3suOmDb8b%2BDat9%2FihPw%3D%3D'; 
$queryParams .= '&' . urlencode('solYear') . '=' . urlencode($ss); 
$queryParams .= '&' . urlencode('solMonth') . '=' . urlencode($ss1);

curl_setopt($ch, CURLOPT_URL, $url . $queryParams);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
$response = curl_exec($ch);
curl_close($ch);

$display = []; //

 $xml = simplexml_load_string($response);
            foreach ($xml->body->items->item as $item) {
                $key = substr($item->locdate,0,4).'-'.substr($item->locdate,4,2).'-'.substr($item->locdate,6,2);
                $val = $item->dateName.'';
                $isholi = $item->isHoliday.'';

                $display[] = array(
                    'date' => $key
                    , 'name' => $val
                    , 'isholi' => $isholi
                );
            }
$today = date('Y-m-d');
$ho = 0; // 기본값은 공휴일 아님
foreach ($display as $holiday) {
    if ($holiday['date'] == $today) {
        $ho = 1; //  공휴일이면 1
        break;
    }
}

function insertWorkTime($conn, $zzzz, $time, $ip) {
global $ho;

$today = date("Y-m-d");
    $result71 = mysqli_query($conn, "SELECT in1, in2, in3, in4  FROM very_work_list2 WHERE work_id='$zzzz'");
$row = mysqli_fetch_array($result71);
$data71 = $row[0];
$data72 = $row[1];
$data73 = $row[2];    
$data75 = $row[3];
    
    
    $result771 = mysqli_query($conn, "SELECT in1, in2, in3,in4  FROM very_work_list3 WHERE work_id='$zzzz'");
$row = mysqli_fetch_array($result771);
$data771 = $row[0];
$data772 = $row[1];
$data773 = $row[2];
$data774 = $row[3];
    
    
       $result81 = mysqli_query($conn, "SELECT in1, in2, in3, in4, in5, in6, in7  FROM very_work_list1 WHERE work_id='$zzzz'");
$row = mysqli_fetch_array($result81);
$data81 = $row[0]; // 월요일
$data82 = $row[1]; // 화요일 
$data83 = $row[2]; // 수요일
$data84 = $row[3]; // 목요일
$data85 = $row[4]; // 금요일
$data86 = $row[5]; // 토요일
$data87 = $row[6]; // 일요일, 공휴일    
    
$result61 = mysqli_query($conn, "SELECT id, ffff, work_in  FROM very_work_list WHERE work_id='$zzzz'  ");
$row = mysqli_fetch_array($result61);
$data61 = $row[0];
$data62 = $row[1];
$data63 = $row[2];    
     
     
    $check_exist_sql = "SELECT id FROM very_work_time WHERE work_total = '$zzzz' AND DATE(work_datetime) = '$today' LIMIT 1"; 
    $check_exist_result = mysqli_query($conn, $check_exist_sql);
    if (mysqli_num_rows($check_exist_result) > 0) { // 오늘 인서트가 있으면 넘어가기
        return; 
    }
    // 인서트 한적이 없으면 넣기
    
    
    if ($data62==1){  // 출퇴근 시간 일정할 때 
   $insert_sql = "INSERT INTO very_work_time (work_id, work_name, work_group, work_intime, work_outtime, work_datetime, work_ip, work_total, dddd)
                   SELECT '$data61', work_name, work_group, ('$today $data63') , '', '$time', '$ip', '$zzzz', '0' 
                   FROM very_work_list
                   WHERE work_id = '$zzzz'";
    executeQuery($conn, $insert_sql);
}else if ($data62==2) {  // 1조, 2조

$today = date("Y-m-d");
$dow = date('w', strtotime($today)); 
$base_date = '2025-04-21'; 
$term = (strtotime($today) - strtotime($base_date)) / 86400; 
$week = floor(($dow + $term) / 7); // 
if ($ho == '1') { // 공휴일
    $in_time = $data75;
} else { 
    switch (($week - 1) % 3) {   // 3주 순환 (0, 1, 2)
        case 0:
            $in_time = $data71;
            break;
        case 1:
            $in_time = $data72;
            break;
        case 2:
            $in_time = $data73;
            break;
    }
    if ($dow == 0 || $dow == 6) { // 주말
        $in_time = $data75;
    }
}

 $insert_sql = "INSERT INTO very_work_time (work_id, work_name, work_group, work_intime, work_outtime, work_datetime, work_ip, work_total, dddd)
                   SELECT '$data61', work_name, work_group, ('$today $in_time') , '', '$time', '$ip', '$zzzz', '0'
 
                   FROM very_work_list
                   WHERE work_id = '$zzzz'";
    executeQuery($conn, $insert_sql);
        
        
        }else if ($data62==4) {  // 지원조
        
    $base_date = '2025-04-29';
$today = date('Y-m-d');
$term = (strtotime($today) - strtotime($base_date)) / 86400 + 1; // 경과 일수 계산
switch ($term % 4) {
    case 1:
        $in_time = $data771;
        break;
    case 2:
        $in_time = $data772;
        break;
    case 3:
        $in_time = $data773;
        break;
    case 0:
        $in_time = $data774;
        break;
}    

 $insert_sql = "INSERT INTO very_work_time (work_id, work_name, work_group, work_intime, work_outtime, work_datetime, work_ip, work_total, dddd)
                   SELECT '$data61', work_name, work_group, ('$today $in_time') , '', '$time', '$ip', '$zzzz', '0'
 
                   FROM very_work_list
                   WHERE work_id = '$zzzz'";
    executeQuery($conn, $insert_sql);

 
}else if ($data62==3 or $data62==8 or $data62==9) {  // 매일 변동
        
    $today = date("Y-m-d");
    $week_day = date('w', strtotime($today));
if ($week_day == 0  || $ho == '1') { // 일요일, 공휴일
    $in_time = $data87;
} elseif ($week_day == 1) { // 월요일
    $in_time = $data81;
} elseif ($week_day == 2) { // 화요일 
    $in_time = $data82;
} elseif ($week_day == 3) { // 수요일
    $in_time = $data83;
} elseif ($week_day == 4) { // 목요일
    $in_time = $data84;
} elseif ($week_day == 5) { // 금요일
    $in_time = $data85;
} else { // 토요일
    $in_time = $data86;
}    
        
        
     $insert_sql = "INSERT INTO very_work_time (work_id, work_name, work_group, work_intime, work_outtime, work_datetime, work_ip, work_total, dddd)
                   SELECT '$data61', work_name, work_group, ('$today $in_time') , '', '$time', '$ip', '$zzzz', '0'
 
                   FROM very_work_list
                   WHERE work_id = '$zzzz'";
    executeQuery($conn, $insert_sql);    
        
        
        
        
}
 

}
function updateWorkOutTime($conn, $id, $time) {
global $zzzz;
  
$today = date("Y-m-d");

  
      $result21 = mysqli_query($conn, "SELECT out1, out2, out3, out4 FROM very_work_list2 WHERE work_id='$zzzz' ");
    $row = mysqli_fetch_array($result21);
    $data21 = $row[0];
    $data22 = $row[1];
    $data23 = $row[2];
    $data27 = $row[3];
    
    
          $result775 = mysqli_query($conn, "SELECT out1, out2, out3, out4 FROM very_work_list3 WHERE work_id='$zzzz' ");
    $row = mysqli_fetch_array($result775);
    $data775 = $row[0];
    $data776 = $row[1];
    $data777 = $row[2];
    $data778 = $row[3];
  $result91 = mysqli_query($conn, "SELECT out1, out2, out3, out4, out5, out6, out7 FROM very_work_list1 WHERE work_id='$zzzz' ");
    $row = mysqli_fetch_array($result91);
    $data91 = $row[0];
    $data92 = $row[1];
    $data93 = $row[2];
    $data94 = $row[3];
$data95 = $row[4];
$data96 = $row[5];
$data97 = $row[6];
    
    
     $result42 = mysqli_query($conn, "SELECT work_out, ffff  FROM very_work_list WHERE work_id='$zzzz' ");
    $row = mysqli_fetch_array($result42);
    $data42 = $row[0];
    $data43 = $row[1];
    
    
    
    
    $check_aa_sql = "SELECT id, work_name, work_intime, work_outtime FROM very_work_time WHERE id = '$id' ORDER BY work_datetime DESC LIMIT 1";
    $check_aa_result = mysqli_query($conn, $check_aa_sql);
    $result11 = mysqli_query($conn, "SELECT  work_intime FROM very_work_time WHERE id = '$id'");
     $row11 = mysqli_fetch_array($result11);
     $data11 = $row11[0];
 
    $datatime = ($data11);
      $time_diff = ((strtotime(date('Y-m-d H:i:s')) - strtotime($datatime)))/7200; 
      $var = floor($time_diff);
    
  
    
    
    
    if ($data43==1){  // 출퇴근 시간 일정할 때 
     $update_sql = "UPDATE very_work_time SET work_outtime = ('$today $data42') WHERE id = '$id' AND dddd < '$var' ";
    executeQuery($conn, $update_sql);
}else if ($data43==2) {  // 1조, 2조
$today = date('Y-m-d');
$dow = date('w', strtotime($today)); 
$base_date = '2025-04-21'; 
$term = (strtotime($today) - strtotime($base_date)) / 86400; 
$week = floor(($dow + $term) / 7); // 
if ($ho == '1') { // 공휴일
    $out_time = $data27;
} else { 
    switch (($week - 1) % 3) {   // 3주 순환 (0, 1, 2)
        case 0:
            $out_time = $data21;
            break;
        case 1:
            $out_time = $data22;
            break;
        case 2:
            $out_time = $data23;
            break;
    }
    if ($dow == 0 || $dow == 6) { // 주말
        $out_time = $data27;
    }
}
        
        
        
$update_sql = "UPDATE very_work_time SET work_outtime = ('$today $out_time') WHERE id = '$id' AND dddd < '$var' ";
executeQuery($conn, $update_sql);
        
    }else if ($data43==4) {  // 지원조
        
    $base_date = '2025-04-29';
$today = date('Y-m-d');
$term = (strtotime($today) - strtotime($base_date)) / 86400 + 1; // 경과 일수 계산
switch ($term % 4) {
    case 1:
        $out_time = $data775;
        break;
    case 2:
        $out_time = $data776;
        break;
    case 3:
        $out_time = $data777;
        break;
    case 0:
        $out_time = $data778;
        break;
}    
    
    $update_sql = "UPDATE very_work_time SET work_outtime = ('$today $out_time') WHERE id = '$id' AND dddd < '$var' ";
executeQuery($conn, $update_sql);        
        
}else if ($data43==3 or $data43==8 or $data43==9) {  // 매일 변동
  
    $today = date("Y-m-d");
    $week_day = date('w', strtotime($today));
if ($week_day == 0  || $ho == '1') { // 일요일, 공휴일
    $out_time = $data97;
} elseif ($week_day == 1) { // 월요일
    $out_time = $data91;
} elseif ($week_day == 2) { // 화요일 
    $out_time = $data92;
} elseif ($week_day == 3) { // 수요일
    $out_time = $data93;
} elseif ($week_day == 4) { // 목요일
    $out_time = $data94;
} elseif ($week_day == 5) { // 금요일
    $out_time = $data95;
} else { // 토요일
    $out_time = $data96;
}        
        
        
    $update_sql = "UPDATE very_work_time SET work_outtime = ('$today $out_time') WHERE id = '$id' AND dddd < '$var' ";
executeQuery($conn, $update_sql);    
        
        

}
    
    
    
    
}
$zzzz = $_GET['cccc'];
$time = date("Y-m-d H:i:s");
$today = date("Y-m-d");
$ip = $_SERVER['REMOTE_ADDR'];
$check_sql = "SELECT id, work_name, work_intime, work_outtime FROM very_work_time WHERE work_total = '$zzzz' ORDER BY work_datetime DESC LIMIT 1";
$check_result = mysqli_query($conn, $check_sql);
$result = mysqli_query($conn, "SELECT work_name FROM very_work_list WHERE work_id='$zzzz' ");
$row = mysqli_fetch_array($result);
$data = $row[0];
$data1 = 1;
$data2 = 2;
$data3 = 3;

if ($check_result && mysqli_num_rows($check_result) > 0) {
    $row = mysqli_fetch_assoc($check_result);
    if (empty($row['work_outtime'])) {
        if (updateWorkOutTime($conn, $row['id'], $time)) {
            echo $data, "6", $data2; // 작업 성공
        } else {
            echo $data, "6", $data3; // 작업 실패
        }
    } else {
        if (insertWorkTime($conn, $zzzz, $time, $ip)) {
            echo $data, "6", $data1; // 작업 성공
        } else {
            echo $data, "6", $data3; // 작업 실패
        }
    }
} else {
    if (insertWorkTime($conn, $zzzz, $time, $ip)) {
        echo $data, "6", $data1; // 작업 성공
    } else {
        echo $data, "6", $data3; // 작업 실패
    }
}
?>
 
 

이 질문에 댓글 쓰기 :

답변 1

insertWorkTime()updateWorkOutTime() 함수에서 결과값을 제대로 반환하지 않고 있습니다.

두 함수에서 return true; 혹은 return false;를 명확히 해주셔야할 것 같습니다.

되돌려 받는게 없으면 null로 받아서 무조건 else 쪽으로 들어갈텐데

if 문 안에 말고 밖으로 빼서 뭘 return 받는지 확인해보셔야할 것 같습니다.

 

 

 


function executeQuery($conn, $sql) {
    $result = mysqli_query($conn, $sql);
    if ($result === false) {
        // 쿼리 실행 자체가 실패한 경우
        error_log("SQL 에러: " . $sql . " - " . mysqli_error($conn));
        echo "에러: " . $sql . "<br>" . mysqli_error($conn);
        return false;
    } else {
        // INSERT, UPDATE, DELETE의 경우 영향받은 행 수 확인
        // SELECT의 경우 결과 객체 반환
        if (is_object($result)) {
            // SELECT 쿼리 결과
            return $result;
        } else {
            // 영향받은 행 수 확인 (0이어도 성공으로 간주)
            return true;
        }
    }
}

 

클로드에서 질문하고 executeQuery function 수정요청했는데 바꿔서 디버깅해보세요. AI 도움도 받아보시는거 추천합니다. 꽤나 정확해요 ㅎㅎ

답변을 작성하시기 전에 로그인 해주세요.
전체 129,112 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT