PHP Update시 500 (Internal Server Error)

PHP Update시 500 (Internal Server Error)

QA

PHP Update시 500 (Internal Server Error)

본문

안녕하세요. 제가 현재 PHP에서 form을 이용해서 추가하는 코드를 작성하고, 등록 버튼을 눌렀을 때 Ajax를 이용해서 다른 php파일로 넘어간 후에 그 파일에서 INSERT하는 코드를 작성했는데요. (MSSQL 사용)

 

INSERT까지 했을 때 다 잘 들어가고 문제가 없습니다.

코드는 아래와 같습니다. (DB 주소 등 정보들은 가렸습니다.)

 


<?php
if(!empty($_POST)){
    $smt_DB_IP = "";
    $smt_DB_ID = ";
    $smt_DB_PWD = "";
    $smt_DB_NAME = "";

    $smt_DB_ConnectInfo = array("UID"=>$smt_DB_ID, "PWD"=>$smt_DB_PWD, "Database"=>$smt_DB_NAME, "CharacterSet" => "UTF-8");
    date_default_timezone_set('Asia/Seoul');
    
    $connect = sqlsrv_connect($smt_DB_IP, $smt_DB_ConnectInfo);
 
    $productName = $_POST["Product"];
    $productLocation = $_POST["Location"];
    $productQuantity = $_POST["productQuantity"];
    $productCharge = $_POST["productCharge"];
    $productUser = $_POST["productUser"];
    $productNote = $_POST["productNote"];
 
    $query = "INSERT INTO tblProductHistory
            SELECT ProductCode, '$productName', 'O', '$productLocation', $productQuantity, 
                    CONVERT(CHAR(19), GETDATE(), 20), '$productCharge', '$productUser', '$productNote'
            FROM tblProduct
            WHERE ProductName = '$productName'";
    }
}
?>

 

여기서 이제 INSERT문이 성공했을 때 UPDATE 하는 코드도 추가해주려고 했고,

아래와 같이 코드를 작성했는데 UPDATE가 먹히지 않는 것 같아서 console을 확인해보니 "500(Internal Server Error)" 빨간글씨만 적혀있었습니다.

 


<?php
if(!empty($_POST)){
    $smt_DB_IP = "";
    $smt_DB_ID = ";
    $smt_DB_PWD = "";
    $smt_DB_NAME = "";

    $smt_DB_ConnectInfo = array("UID"=>$smt_DB_ID, "PWD"=>$smt_DB_PWD, "Database"=>$smt_DB_NAME, "CharacterSet" => "UTF-8");
    date_default_timezone_set('Asia/Seoul');
    
    $connect = sqlsrv_connect($smt_DB_IP, $smt_DB_ConnectInfo);
 
    $productName = $_POST["Product"];
    $productLocation = $_POST["Location"];
    $productQuantity = $_POST["productQuantity"];
    $productCharge = $_POST["productCharge"];
    $productUser = $_POST["productUser"];
    $productNote = $_POST["productNote"];
 
    $query = "INSERT INTO tblProductHistory
            SELECT ProductCode, '$productName', 'O', '$productLocation', $productQuantity, 
                    CONVERT(CHAR(19), GETDATE(), 20), '$productCharge', '$productUser', '$productNote'
            FROM tblProduct
            WHERE ProductName = '$productName'";
 
    // tblProductHistory 추가에 성공하면 tblProduct의 수량도 변경해줘야 함
    if (sqlsrv_query($connect, $query)) {
        $change_product_query = "UPDATE tblProduct
                                    SET ProductCount = (tblProduct.ProductCount - $productQuantity)
                                    FROM (SELECT * FROM tblProductHistory) as H
                                    WHERE tblProduct.ProductCode = H.ProductCode AND tblProduct.ProductName = '$productName'"
    }
}
?>

 

UPDATE문에다가 앞서 작성한 INSERT문을 그대로 넣어봤을 때 이상 없이 insert가 2번 잘 실행되길래

UPDATE문이 문제가 있는건가 싶어서 MSSQL에서 돌려봤는데 문제가 없었고,

이번엔 UPDATE문을 지우고, 기존 INSERT문에 UPDATE문을 넣어줘보니 잘 실행됩니다..

 

쿼리에는 확실하게 문제가 없는걸 알았는데 왜 update문은 실행이 안되고, 콘솔창에  500 (Internal Server Error)이 뜨는지 알 수 있을까요?

 

감사합니다.

 

이 질문에 댓글 쓰기 :

답변 3

https://sir.kr/qa/?wr_id=405998

개발할 때는

에러 메시지 확인이 우선입니다.

넵 감사합니다. 상단에 말씀하신

error_reporting(E_ALL);
ini_set('display_errors', '1');

를 넣어봤는데 아무것도 뜨지 않네요ㅠㅠ 우선 에러 출력하는부분을 성공한 후에도 이유를 모르겠다면 그때 다시 질문 드리겠습니다.
감사합니다!

링크에 있는 내용 중에
error_reporting()으로는 startup_error를 잡아 낼 수 없습니다.
경우에 따라서는 .htaccess에서 다음 flag를 지정하는 것이 필요합니다.
php_flag display_startup_errors on
자세한 것은 다른 답변의 링크에 있는 내용을 참고하세요.

ini_set('display_errors', 1);

일단 에러출력을 활성화 시키세요.

 

500은 그냥 서버에서 오류가 나면 php가 웹서버에 전달하는 오류입니다.

상세한 오류는 오류메세지 출력을 활성화 시켜서 확인하셔야 합니다.

활성화 하는 방법은 몇가지가 있지만, 위의 구문을 php 코드 상단에 넣는게 간편합니다.

넵 감사합니다. 상단에 말씀하신

error_reporting(E_ALL);
ini_set('display_errors', '1');

를 넣어봤는데 아무것도 뜨지 않네요ㅠㅠ 우선 에러 출력하는부분을 성공한 후에도 이유를 모르겠다면 그때 다시 질문 드리겠습니다.
감사합니다!

 왜 update문은 실행이 안되고 <--- 당연히 실행 안되죠ㅛ

$change_product_query 를 실행하는 sqlsrv_query 는 어디갔나요?

위 코드는 insert실행만 하도록 되어있으니 500에러는 insert쿼리에서 발생한 것 같군요

 

sqlsrv_query($connect, $query);

sqlsrv_query(connect,$change_product_query);

두개를 각각 실행해보세요

 

 

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

회원로그인

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