티스토리 뷰

반응형

코드상 이상이 없는데 같은 버전의 서버 A와 B가 있을때 A는 정상작동이나 B에서는 이상작동이 생기는 현상이 있어서 시간을 몰빵해서 알아낸 결과

 

php는 변수 처리에 유연성이 좋은 편이어서 다른 프로그램언어처럼 항상 변수타입을 선언해주지 않아도 되었는데 이게 좀 더 업그레이드 되가면서 php8.x에서의 빈값<0 이 참인 경우가 생기거나 
sql_mode에서  'STRICT_TRANS_TABLES' 이 설정되어있으면 오류가 발생하게 된다.

기존에 이런 부분을 고려하지 않고 프로그램을 제작하기 때문에 빈값이 쿼리문으로 갔을때 컬럼이 숫자형이면 자동으로 0으로 기록이 되어야하는 것을 이용해서 작성했는데 

서버환경에서 이것을 엄격하게 적용해버린다면 내부의 작성된 코드를 직관적으로 파악이 불가능하고
실제로 오류로 디비에서 출력되는 mysqli_error($con)의 명령으로 전부다 출력해서 봐야된다.

그래서 서버에서 설정을 변경해줘야하는데 보통 웹사이트들은 공용서버를 사용하고 있으니 서버관리자가 설정 바꿔주기가 애매할 수 있다. 다른 사이트의 설정이 바뀌면 그 사이트들은 어떻게 될지 모르니.

그래서 일시적으로  들어가서 작업하는 거는

 mysqli_query($conn, "SET SESSION sql_mode=(SELECT REPLACE(@@session.sql_mode, 'STRICT_TRANS_TABLES', ''))");


이걸로 db의 connect부분에 바로 넣어줘 버리면 내부적으로는 한번에 이용된다.

mysqli_query($conn, "SET SESSION sql_mode=(SELECT REPLACE(@@session.sql_mode, 'STRICT_TRANS_TABLES', ''))");

 

 

어제 하루를 갈아먹은 이유였는데 결국은 원인 해결

 

그리고 서버에 따라서 느려질 수 있는데 

데이타가 많은 테이블에서 INDEX 설정으로 해결 보통  <= 이런 식으로 범위로 지정하는 쿼리문에 컬럼을 해주면된다

 

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함