퀴리 실행결과 리턴 문제

퀴리 실행결과 리턴 문제

QA

퀴리 실행결과 리턴 문제

답변 2

본문


 

<?php
$conn = mysqli_connect("localhost", "******", "*******!", "****");
 
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 {
        if (is_object($result)) {
            return $result;
        } else {
            return true;
        }
    }
}
function insertWorkTime($conn, $zzzz, $time, $ip) {
    $today = date("Y-m-d");
    $check_exist_sql = "SELECT id FROM very_work_time1 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; 
    }
    // 인서트 한적이 없으면 넣기

$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];    
    $insert_sql = "INSERT INTO very_work_time1 (work_id, work_name, work_group, work_intime, work_outtime, work_datetime, work_ip, work_total, dddd)
                   SELECT '$data61', work_name, work_group, '$time', '', '$time', '$ip', '$zzzz', '0'
                   FROM very_work_list
                   WHERE work_id = '$zzzz'";
   if (executeQuery($conn, $insert_sql)) {
        echo $data1; // 작업 성공
        return true;
    } else {
        echo $data3; // 작업 실패
        return false;
    }

}
function updateWorkOutTime($conn, $id, $time) {
    $check_aa_sql = "SELECT id, work_name, work_intime, work_outtime FROM very_work_time1 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_time1 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);
     $update_sql = "UPDATE very_work_time1 SET work_outtime = '$time' WHERE id = '$id' AND dddd < '$var' ";
    if (executeQuery($conn, $update_sql)) {
        echo $data2; // 작업 성공
        return true;
    } else {
        echo $data3; // 작업 실패
        return false;
    }

}
$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_time1 WHERE work_total = '$zzzz' ORDER BY work_datetime DESC LIMIT 1";
$check_result = mysqli_query($conn, $check_sql);
$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;
    }
}
?>
 

 

insert 성공시 data1

        실패시 date3

update 성공시 data2

        실패시 date3  값을 출력하게 했는데

 

다른건 제대로 작동하는데

insert 실패시 date3 이 정상적으로 출력되는데

update 실패시에는 date2가 출력되는게 문제입니다.

 

왜그런지 조언 부탁드립니다 ㅠㅠ

 

이 질문에 댓글 쓰기 :

답변 2

아래의 코드를 한번 참고를 해보시겠어요..

 

 

 

<?php
$conn = mysqli_connect("localhost", "******", "*******!", "****");
 
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 {
        if (is_object($result)) {
            return $result;
        } else {
            return true;
        }
    }
}

function insertWorkTime($conn, $zzzz, $time, $ip, $data1, $data3) {
    $today = date("Y-m-d");
    $check_exist_sql = "SELECT id FROM very_work_time1 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; 
    }
    // 인서트 한적이 없으면 넣기

    $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];    
    
    $insert_sql = "INSERT INTO very_work_time1 (work_id, work_name, work_group, work_intime, work_outtime, work_datetime, work_ip, work_total, dddd)
                   SELECT '$data61', work_name, work_group, '$time', '', '$time', '$ip', '$zzzz', '0'
                   FROM very_work_list
                   WHERE work_id = '$zzzz'";
   if (executeQuery($conn, $insert_sql)) {
        echo $data1; // 작업 성공
        return true;
    } else {
        echo $data3; // 작업 실패
        return false;
    }
}

function updateWorkOutTime($conn, $id, $time, $data2, $data3) {
    $check_aa_sql = "SELECT id, work_name, work_intime, work_outtime FROM very_work_time1 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_time1 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);
    $update_sql = "UPDATE very_work_time1 SET work_outtime = '$time' WHERE id = '$id' AND dddd < '$var' ";
    
    if (executeQuery($conn, $update_sql)) {
        echo $data2; // 작업 성공
        return true;
    } else {
        echo $data3; // 작업 실패
        return false;
    }
}

$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_time1 WHERE work_total = '$zzzz' ORDER BY work_datetime DESC LIMIT 1";
$check_result = mysqli_query($conn, $check_sql);
$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, $data2, $data3)) {
            echo $data, "6",  $data2; 
        } else {
            echo $data, "6", $data3;
        }
    } else {
        if (insertWorkTime($conn, $zzzz, $time, $ip, $data1, $data3)) {
            echo $data, "6", $data1;
        } else {
            echo $data, "6", $data3;
        }
    }
} else {
    if (insertWorkTime($conn, $zzzz, $time, $ip, $data1, $data3)) {
        echo $data, "6", $data1;
    } else {
        echo $data, "6", $data3;
    }
}
?>

 

 

 

 

1. UPDATE 쿼리에 AND dddd < '$var' 조건이 붙어 있는데, 이 조건을 만족하지 않을 경우 UPDATE가 실행되지 않습니다.
2. executeQuery 함수는 쿼리가 오류 없이 실행되면 true를 반환합니다. 그러나 업데이트할 레코드가 없으면 (조건에 맞는 레코드가 없으면) 쿼리는 성공적으로 실행되었지만 아무 행도 변경되지 않은 것입니다.

 

updateWorkOutTime 함수 수정


function updateWorkOutTime($conn, $id, $time) {
    $check_aa_sql = "SELECT id, work_name, work_intime, work_outtime FROM very_work_time1 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_time1 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);
    $update_sql = "UPDATE very_work_time1 SET work_outtime = '$time' WHERE id = '$id' AND dddd < '$var' ";
    
    if (executeQuery($conn, $update_sql)) {
        // 영향을 받은 행 수 확인
        if (mysqli_affected_rows($conn) > 0) {
            echo $data2; // 작업 성공
            return true;
        } else {
            echo $data3; // 작업 실패 (조건에 맞는 행이 없음)
            return false;
        }
    } else {
        echo $data3; // SQL 오류
        return false;
    }
}
답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
filter #php ×
전체 15,827
© SIRSOFT
현재 페이지 제일 처음으로