서버를 옮긴 후 부터 장바구니 담기와 바로구매가 되지 않고 있습니다.

서버를 옮긴 후 부터 장바구니 담기와 바로구매가 되지 않고 있습니다.

QA

서버를 옮긴 후 부터 장바구니 담기와 바로구매가 되지 않고 있습니다.

본문

안녕하세요.

기존 사용하던 서버에서 새로운 서버로 소스와 디비를 모두 이전하고 사이트를

다시 구동시키고 있습니다.

data폴더 퍼미션도 707로 변경하여 로그인까지 정상적으로 되는걸봐서는 session문제는 아닐듯 한데요;;;

바로구매나 장바구니담기를 하면 '장바구니가 비어 있습니다' 라는 경고창이 

/shop/orderform.php?sw_direct=1 여기에서 출력이되고 빈 장바구니로 넘어갑니다.

cartupdate.php를 살펴보니 
 
// 바로구매에 있던 장바구니 자료를 지운다.
if($i == 0 && $sw_direct)
 sql_query(" delete from {$g5['g5_shop_cart_table']} where od_id = '$tmp_cart_id' and ct_direct = 1 ", false)

위 쿼리가 실행이 되어서 그런것 같은데 위 쿼리 실행 조건이 바로구매 조건이 아닌가요?

이전 서버에 남아있는 다른 영카트에서 바로구매을 해서 $i를 출력해봐도 새로 옮긴 서버에서와 똑같은

값인 0 이 출력되는데 왜 이전 서버에서는 문제가 없고 새로운 서버에서만 이런 문제가 생기는지 원인을 찾기가 너무 힘드네요;;;;;;

이 질문에 댓글 쓰기 :

답변 3

ct_memo1, ct_memo2~~~이 컬럼이 어떤 용도인지는 모르겠으나

ChatGpt 답변처럼 GROUP BY에 사용하면 문제가 될 수 있겠네요

즉 it_id가 동일한데 ct_memo1~ct_memo7의 내용 중에서 다른 것이 있으면 그룹을 다르게 나누므로

합계금액, 상품수량 등이 중복계산 되어 출력 되겠습니다

 

ct_memo1~7 의 내용이 모두 없거나 모두 동일하면 문제 없습니다 

 

$tmp_cart_id 값은 정상적으로 생성되어 나오는지 확인해 보시고요
장바구니에 담겨지는 쿼리 부분을 디버깅해서 찍어 정상적으로 등록이 되는지도 체크해 보셔야 할듯 합니다.

어찌저찌 g5_shop_cart에 데이터가 들어가는것 까지는 확인이 되었습니다. 다만 또 다른 문제가 있는데 결론은 이게 문제인것 같네요;;;;
orderform.sub.php에 보면


// $s_cart_id 로 현재 장바구니 자료 쿼리
        $sql = " select a.ct_id,
                        a.it_id,
                        a.it_name,
                        a.ct_price,
                        a.ct_point,
                        a.ct_qty,
                        a.ct_status,
                        a.ct_send_cost,
                        a.it_sc_type,
						a.ct_memo1,
						a.ct_memo2,
						a.ct_memo3,
						a.ct_memo4,
						a.ct_memo5,
						a.ct_memo6,
						a.ct_memo7,
						a.ord_code,
                        b.ca_id,
                        b.ca_id2,
                        b.ca_id3,
						b.it_1,
						b.it_type1,
						b.it_cust_price,
                        b.it_notax
                   from {$g5['g5_shop_cart_table']} a left join {$g5['g5_shop_item_table']} b on ( a.it_id = b.it_id )
                  where a.od_id = '$s_cart_id'
                    and a.ct_select = '1' ";
        $sql .= " group by a.it_id ";
        $sql .= " order by a.ct_id ";
        $result = sql_query($sql);


이 쿼리를 출력해서 따로 날려보니까 아래와 같은 오류가 떴습니다.

SQL Error [1055] [42000]: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'parashopdb.a.ct_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

뭔지는 잘 모르겠지만 group by문제 같은데 이게 뭘까요;;;;;;;;;;;;;

sql_mode의 ONLY_FULL_GROUP_BY 가 문제라고 해서 끄고 해봤는데도 안되더니 chatgpt가 쿼리를 수정해줘서 해보니까 되네요;;;; 다른 문제가 생기는건 아닌까 걱정되긴 한데 일단 되는건 확인했습니다. chatgpt 만세!!! 아래 쿼리는 chatgpt가 수정해준 쿼리 입니다. 혹시나 같은 문제 있으신 분들 참고하시라고 올립니다.


SELECT a.ct_id,
					   a.it_id,
					   a.it_name,
					   a.ct_price,
					   a.ct_point,
					   a.ct_qty,
					   a.ct_status,
					   a.ct_send_cost,
					   a.it_sc_type,
					   a.ct_memo1,
					   a.ct_memo2,
					   a.ct_memo3,
					   a.ct_memo4,
					   a.ct_memo5,
					   a.ct_memo6,
					   a.ct_memo7,
					   a.ord_code,
					   b.ca_id,
					   b.ca_id2,
					   b.ca_id3,
					   b.it_1,
					   b.it_type1,
					   b.it_cust_price,
					   b.it_notax
				FROM {$g5['g5_shop_cart_table']} a
					LEFT JOIN {$g5['g5_shop_item_table']} b ON (a.it_id = b.it_id)
				WHERE a.od_id = '$s_cart_id'
					AND a.ct_select = '1'
				GROUP BY a.ct_id, a.it_id, a.it_name, a.ct_price, a.ct_point, a.ct_qty, a.ct_status, a.ct_send_cost, a.it_sc_type, a.ct_memo1, a.ct_memo2, a.ct_memo3, a.ct_memo4, a.ct_memo5, a.ct_memo6, a.ct_memo7, a.ord_code, b.ca_id, b.ca_id2, b.ca_id3, b.it_1, b.it_type1, b.it_cust_price, b.it_notax
				ORDER BY a.ct_id

mysql(mariaDB) 버전이 바뀌거나 기본? 설정이 바뀌어서

나타나는 증상이네요.

https://stackoverflow.com/questions/41887460/select-list-is-not-in-group-by-clause-and-contains-nonaggregated-column-inc

점점 오라클을 따라가나 봅니다.

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

회원로그인

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