set_cart_id함수 커스텀 중 mysql query가 비동기처럼 처리되는 현상 채택완료
하이바네
5년 전
조회 2,011
안녕하세요 개발 진행중에 도저히 이해가 안 되서 질문 올립니다.
set_cart_id함수를 수정하고 있는데 쿼리의 값이 예상했던값과 너무 다르게 나오고 있습니다.
</p>
<p>// cart id 설정</p>
<p>function set_cart_id($direct)</p>
<p>{</p>
<p> global $g5, $default, $member;</p>
<p> </p>
<p> echo 'in set_cart_id'.'
';</p>
<p> </p>
<p> if ($direct) {</p>
<p> $tmp_cart_id = get_session('ss_cart_direct');</p>
<p> if(!$tmp_cart_id) {</p>
<p> $tmp_cart_id = get_uniqid();</p>
<p> set_session('ss_cart_direct', $tmp_cart_id);</p>
<p> }</p>
<p> } else {</p>
<p> // 비회원장바구니 cart id 쿠키설정</p>
<p> if($default['de_guest_cart_use']) {</p>
<p> $tmp_cart_id = preg_replace('/[^a-z0-9_\-]/i', '', get_cookie('ck_guest_cart_id'));</p>
<p> if($tmp_cart_id) {</p>
<p> set_session('ss_cart_id', $tmp_cart_id);</p>
<p> //set_cookie('ck_guest_cart_id', $tmp_cart_id, ($default['de_cart_keep_term'] * 86400));</p>
<p> } else {</p>
<p> $tmp_cart_id = get_uniqid();</p>
<p> set_session('ss_cart_id', $tmp_cart_id);</p>
<p> set_cookie('ck_guest_cart_id', $tmp_cart_id, ($default['de_cart_keep_term'] * 86400));</p>
<p> }</p>
<p> } else {</p>
<p> $tmp_cart_id = get_session('ss_cart_id');</p>
<p> if(!$tmp_cart_id) {</p>
<p> $tmp_cart_id = get_uniqid();</p>
<p> set_session('ss_cart_id', $tmp_cart_id);</p>
<p> }</p>
<p> }</p>
<p> </p>
<p> // 보관된 회원장바구니 자료 cart id 변경</p>
<p> if($member['mb_id'] && $tmp_cart_id) {</p>
<p> $last_od_data = NULL;</p>
<p> //마지막 od_id찾기</p>
<p> $last_od_sql = "select</p>
<p> od_id</p>
<p> from</p>
<p> {$g5['g5_shop_cart_table']}</p>
<p> where</p>
<p> mb_id = '{$member['mb_id']}' and</p>
<p> ct_direct = '0' and</p>
<p> ct_status = '쇼핑'</p>
<p> LIMIT 1";</p>
<p> //echo $last_od_sql.'
';</p>
<p> </p>
<p> $last_od_data = sql_fetch($last_od_sql);</p>
<p> echo "tmp_cart_id : ".$tmp_cart_id.' last_od_data : '.$last_od_data['od_id'].'
';</p>
<p> </p>
<p> //폴더 이름 변경</p>
<p> if($last_od_data[od_id]){//데이터가 있는 경우에만 폴더 변경 및 업데이트 실시</p>
<p> $file_before_loc = "shop/order/$last_od_data[od_id]";</p>
<p> $file_after_loc = "shop/order/$tmp_cart_id";</p>
<p> echo "tmp_cart_id : ".$tmp_cart_id.' last_od_data : '.$last_od_data[od_id].'
';</p>
<p> fullCopy($file_before_loc,$file_after_loc);</p>
<p> if($file_before_loc != $file_after_loc && is_dir($file_before_loc)){//before / after 폴더가 다른 경우에만 삭제</p>
<p> rmdirAll($file_before_loc);</p>
<p> }</p>
<p> echo "tmp_cart_id : ".$tmp_cart_id.' last_od_data : '.$last_od_data[od_id].'
';</p>
<p> </p>
<p> //mb_id가 없고 od_id가 현재 $tmp_cart_id랑 같은 것은 mb_id를 추가</p>
<p> </p>
<p> $sql = " update {$g5['g5_shop_cart_table']}</p>
<p> set mb_id = '{$member['mb_id']}',od_id = '$tmp_cart_id'</p>
<p> where</p>
<p> od_id = '{$last_od_data['od_id']}' and</p>
<p> ct_direct = '0' and</p>
<p> ct_status = '쇼핑' ";</p>
<p> </p>
<p> echo "tmp_cart_id : ".$tmp_cart_id.' last_od_data : '.$last_od_data[od_id].'
';</p>
<p> sql_query($sql);//여기 주석하면 정상동작</p>
<p> echo "tmp_cart_id : ".$tmp_cart_id.' last_od_data : '.$last_od_data[od_id].'
';</p>
<p> }</p>
<p> }</p>
<p> }</p>
<p> </p>
<p>
$last_od_sql의 쿼리의 값을 저장하고, $sql쿼리로 업데이트를 진행하게 되어져 있습니다.
그런데 $sql쿼리를 sql_query($sql)로 실행시키는 코드를 넣는 순간 $last_od_sql의 값이 $sql쿼리가 실행되고 나서의 값으로 변경 되는 현상이 있습니다.
뭔가 비동기 처리되어서 $last_od_sql이 나중에 실행되는것 같기도 한데 원인을 못찾고 있습니다.
긴 글 읽어주셔서 감사합니다;;
댓글을 작성하려면 로그인이 필요합니다.
답변 1개
답변을 작성하려면 로그인이 필요합니다.
로그인
저도 그거를 생각하고 set_cart_id()에 들어가면 echo 'in set_cart_id'.'<br>';를 적어놨었는데 한번만 출력되는 것을 보니 정상인거 같고..어렵네요.