Kohana 3에서는 이제 쿼리에 명명된 매개변수를 바인딩할 수 있지만 바인딩할 수 없는 매개변수를 어떻게 이스케이프합니까?

StackOverflow https://stackoverflow.com/questions/2204149

  •  18-09-2019
  •  | 
  •  

문제

Kohana 3에서는 다음과 같이 쿼리에 매개변수를 바인딩할 수 있습니다.

$query = 'SELECT name FROM users WHERE id = :id';

이것은 깔끔하지만 때로는 테이블 이름과 같은 다른 항목을 구성할 수 있기를 원합니다.테이블 이름에 명명된 매개변수를 사용하면 실패합니다.나는 이런 상황에서 끈을 만들어 왔습니다.

내 질문은 이런 종류의 문자열 작성을 수행할 때 잠재적으로 잘못된 문자를 어떻게 피할 수 있습니까?입니다.Kohana 2.x에서는 다음을 수행할 수 있습니다. $this->db->escape() 하지만 코하나 3은 근본적으로 다르기 때문에 새로운 방법이 있을 것 같은데요?

도움이 되었습니까?

해결책

Mark Byers의 답변에 추가하면 테이블 이름의 매개변수화가 실패한 이유는 매개변수가 다음과 같이 이스케이프되기 때문입니다. 가치, 테이블 이름은 식별자.아마도 무슨 일이 일어나고 있는지는 테이블 이름이 따옴표로 묶여 있고 그 대신 백틱으로 묶여 있어야 한다는 것입니다.

그러나 Mark가 말했듯이 테이블 이름을 이스케이프 처리해야 한다는 것은 잘못된 디자인을 의미합니다.어쨌든 이스케이프할 필요가 없도록 내용을 신뢰할 수 있는 일부 구성 파일에 하드 코딩하거나 저장해야 합니다.자신의 구성을 신뢰할 수 없을 정도로 모든 기반을 다루려고 하는 것은 시간 낭비일 가능성이 높습니다.

다른 팁

나는 Kohana를 사용한 적이 없으므로이 의견이 완전히 관련이 없다면 사과하지만, 당신이하려는 일에 대한 몇 가지 의견이 있습니다.

테이블 이름에 이름이 지정된 param을 사용하면 실패합니다.

나는 이것이 기본 데이터베이스의 매개 변수 메커니즘에 의존하고 있기 때문에 쿼리에서 테이블 이름을 매개 변수로 제공 할 수있는 데이터베이스를 모르기 때문이라고 가정합니다. 그렇습니다. 아마도 당신은 직접 문자열을 만들어야 할 것입니다.

이런 종류의 스트링 빌딩을 할 때 어떻게 잠재적으로 나쁜 캐릭터를 탈출 할 수 있습니까?

이 질문은 이상하게 보입니다 ... 일부 테이블 이름에 잠재적으로 나쁜 캐릭터가 있습니다 ... 그렇다면 왜 그런가요? 그렇지 않으면 신뢰할 수없는 소스 (사용자?)로부터 테이블 이름을 받고 있습니다. 이것은 나에게 나쁜 생각처럼 들립니다. 그들이 접근 할 수없는 테이블에서 읽으려고한다면 어떨까요? 허용 가능한 테이블 이름의 잘 정의 된 목록을 가지고 잠재적으로 나쁜 테이블 이름을 피하는 대신 해당 목록에 테이블이 있는지 확인하는 것이 더 낫지 않습니까?

최종 관찰이 하나 있습니다. 쿼리에서 테이블 이름을 변경할 수 있고 여전히 작동한다면 데이터베이스가 올바르게 정규화되지 않았다는 신호 일 수 있습니다. 아마도 테이블을 결합하고 그룹화에 대한 정보와 함께 추가 열을 추가하고 Where 절을 사용하여 원하는 데이터를 선택할 수 있습니까? 더 구체적인 것을 제안하기 위해 귀하의 모델에 대해 더 알아야합니다.

이것이 당신의 질문에 전혀 도움이되는지 확실하지 않지만, 이것은 당신의 질문을 읽는 것에 대한 나의 생각이었습니다. 나는 당신이 그것의 일부를 사용할 수 있기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top