반응형

php 19

쿼리빌더로 실행되는 쿼리 확인

원래는 그냥 작성한 sql에 일부러 오류를 내서 돌아가는 쿼리를 바로 확인하는 식으로 디버깅을 했지만 ci4에서는 불가능했다.그래서 제미니한테 확인해보니 다음과 같이 확인이 가능했다.방법 1: getCompiledSelect() 사용 (권장)이 방법은 데이터베이스에 실제로 쿼리를 실행하지 않고 최종 SQL 문자열만 생성하기 때문에, SELECT 문을 디버깅할 때 가장 안전하고 효율적입니다.// 1. 쿼리 빌더 객체를 가져옵니다.$builder = $this->testtModel->selectSchList($params);// 2. 실행될 SELECT SQL 쿼리 문자열을 생성합니다.$sql = $builder->getCompiledSelect();// 3. 화면에 출력하고 실행을 멈춥니다.echo "[디..

조직도 폴더 메뉴 드랍 개발 1

조직도를 폴더 형태로 개발해야되는 상황이다1. 업체가 있음2. 그 밑에 부서가 있음3. 그 밑에 팀이 있음4. 그 밑에 팀 별 폴더가 있음5. 폴더는 최하위 사항 일단 DB는 파트나 팀이 있으면 PART별로 고유키 값을 설정해두었고 파트별 상위 PARENT_CD가 있다,각 폴더별 SEQ와 상위 폴더가 무엇인지 구별하기 위한 TOP_FOLDER 필드를 넣어뒀다. 중요 필드를 정리하면F_SEQ, TOP_FOLDER_SEQ, PART_CD, PARENT_CD 이다.이 데이터 전체를 배열형태로 가져와서 이걸 재귀함수를 돌면서 메뉴 형태의 배열로 바꿀것이다.AI는 제미니의 도움을 받았으며, 역시나 잘 도와주다가도 길을 잃는 경우가 생겼다.처음 제미니와 짜게 된 형태는 다음과 같다private function bu..

쿼리 직접작성 할 때 주의점 (로우 쿼리)

쿼리를 작성하여 바인딩 하는 부분에서 문제가 있었다기존에insertData = [ 'F_1' => $a, 'F_2'=>$b];$sql = "insert into T_HISTROY (F_1, F_2) values (?, ?)";return $this->db->query($sql, $insertData);이런식으로 데이터를 넣을때 인식하지 못하는 상황이였다 그래서 이리저리 확인해본 결과 바인딩 문제였다. 현재 저 쿼리를 쓰는 MODEL에는 테이블을 지정하지 않았었다.*원래는 상단에 테이블과 필드를 선언해주는게 일반적이다*그래서 그런지 F_1, F_2 로 키:값 으로 배열을 만들어 보내면 인식하지 못하여 바인딩이 제대로 들어가지 않는 상황이였다.insertData = [ ..

코드이그나이터3(CI3)에서 CI4로! 프로젝트 전환 후기 2

CI3내가 옛날 ci3 에서 작업물에서 작업하면서 가장 별로였던 부분 중에 하나가 view를 불러오는 방식이였다.function index() { $this->load->view ( 'inc/top' ); $this->load->view ( 'main' ); $this->load->view ( 'inc/bottom' ); }컨트롤러에서 저런식으로 top main bottom 을 분리해서 가져오는데, 문제는 저걸 매번 컨트롤러에 복사 붙여넣기를 해야했다. (저 방식이 장점도 있겠다만 나한테는 단점밖에 안보였다) 그래서 내가 참여하여 진행하게되는 신규 프로젝트들에는 꼭 공통 layout 을 따로 빼서 다음과 같이 view_content 부분을 심어두고 ..

코드이그나이터3(CI3)에서 CI4로! 프로젝트 전환 후기 1 (feat. 서비스 패턴)

지금까지 CI3 를 사용하다가 CI4 로 바꾸자고 얘기하면서 드디어 CI4로 바꾸게 되었다.CI3에 익숙했던 팀원들을 설득하는 과정은 쉽지 않았지만, CI4가 가진 현대적인 개발 방식과 구조적 이점을 생각하면 반드시 가야 할 길이라고 생각했다.새 프로젝트를 진행하면서 CI3와 CI4를 다루면서 느끼는 차이점을 적을 예정이다. 1. 개발 환경: PHP 7.4와 CI 4.4일단 CI4는 PHP8 이상의 서버 환경을 추천하지만 환경상 PHP7.4 로 진행해야했기에최신버전의 CI4 4.6버전이 아닌 CI4 4.4 버전으로 낮춰서 진행했다.2. 사소하지만 중요한 변화: 코드 스타일의 현대화가장 먼저 팀원들과 합의한 것은 코드 스타일의 통일이다.기존 CI3 방식: 스네이크 케이스 (test_code, get_use..

url 프래그먼트/해시(#) 에 대해

많이 보던거지만 평소에 그냥 지나치던 것이라서 갑자기 궁금하게 되어 확인했다.궁금해진 이유는 url의 파라미터 값을 받기위해 처리를 하다가 문득 # 가 제외된다는게 눈에 띄어서 확인하게되었다. 웹페이지에서 검색하다보면http:aaa/test/1/dd#이라고 끝에 # 가 붙는 경우를 볼 수 있다.이 url을 서버에 넘기면 서버에서는 #을 제외하고 http:aaa/test/1/dd 이것만 인식하여 처리하게 된다. 이건 특정 프레임워크 때문이 아닌 웹 동작의 근본을 두고있다.이것의 유일한 역할은 웹 서버가 아니라, 사용자의 웹 브라우저에게 "페이지 로드가 완료되면, 이 ID를 가진 특정 위치로 화면을 스크롤해줘" 라고 알려주는 클라이언트 사이드(Client-side) 전용 책갈피이다.동작 흐름은 다음과 같다고..

php 2025.07.03

php 8.1 phpexcel 대체

기존 phpexcel 을 사용중이였는데 버전업을 진행하며 이제는 더이상 phpexcel를 사용할 수 없게되었다.파일을 읽는건 문제 없지만 엑셀을 출력하기위해 엑셀을 쓰는 과정에서 오류가 있었다.다음은 오류중 하나이다더보기Message: Return type of PHPExcel_WorksheetIterator::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice그냥 간단하게 타입명시 오류다.일일이 고치기도 힘들기에 이제는 더이상 phpexcel을 가지고 갈 수 없는 환..

curl 대체 코드

제목 그대로 php에서 curl 을 사용하고 싶은데 사용하지 못하는 경우 사용한 코드이다.해당 문제는 APM 를 배포하는 부분에서 발생했다.APM 을 배포하여 아파치와 PHP가 새로운 환경에 설치되는데 해당 PC에서 오류가 났었다.분명 내 PC에서 테스트시 문제가 없었지만 새로운 환경으로 배포하면 오류가 생기는 상황이라 당황스러웠다.코드도 완벽히 같은 상황에서 확인해보니 curl 사용하여 외부 api 를 호출하는 부분에서 오류가 생겼다.내가 테스트했던 pc인 경우 curl 을 설치했던 이력이 있어서 문제가 없었지만 새롭게 설치되는 환경에서는 해당 설치가 이뤄지지 않았기에 오류가 생겼던 것이다.매 환경마다 curl을 설치할 수는 없기에 curl을 사용하지 않기로 했다. 다음은 대체 코드이다GET 호출// ..

php 2024.10.07

php 오라클 date 타입 형식 변경

php에서 오라클 데이터중 date 형식의 데이터를 가져오게되면10-Oct-03 이런식으로 가져오는 경우가 있다.이런경우 형식을 YYYY-MM-DD HH24:MI:SS 형식으로 바꿔주는 방법이다. class Test_model extends CI_Model{ public function __construct() { parent::__construct(); $this->set_nls_date_format(); } /** * 해당 세션에서만 오라클 date 타입 형식을 바꿔주는 쿼리 */ public function set_nls_date_format($format = 'YYYY-MM-DD HH24:MI:SS'){ $query = "ALTER SESSION SET nls_date_format = '..

반응형