2011-12-03 3 views
2

$ _GET 변수에 switch 문을 사용하여 내 페이지에서 원하는 결과를 얻고 있습니다.switch 문에 PHP 쿼리 db

필자는 모범 사례 또는 방법을 모르기 때문에 항상 이와 같은 상황에서 쿼리를 실행하는 가장 좋은 방법에 대해 의문을 품습니다. 그래서 아래에 몇 가지 의사 코드가 있으며 가장 좋은 방법이 무엇인지 궁금합니다.

이것은 성능 측면에서 중요하지 않은 상황이 될 수 있지만, 제대로 작동하는지 확인하고 싶습니다.

if(isset($_GET['type'])){ 
    $var = $_GET['type']; 

    //run the query now and select everything needed from the DB for either switch case. 
    //view implications that involve pulled data 
    switch($var){ 

    case '1': 

    //Or do I run the query here, getting only what I need for this situation 
    //view implications that involve pulled data 
    break; 

    case '2': 

    //again run the query here, getting only what I need for this situation 
    //view implications that involve pulled data 

    break; 


    } 

} 

두 경우는 DB에서 데이터를 하나 개 또는 두 개의 유사한 조각을 공유하지만 각각의 경우에 대한 내용의 대부분은 그 상황에서 필요하다.

코드를 최상으로 수행하고 코드를 가능한 깨끗하고 효율적으로 유지하려고하는 최하위 라인.

감사합니다.

+2

데이터베이스 구성 방법에 따라 다릅니다. 내부적으로'type'을 처리하도록 쿼리를 인라인 할 수 있다면 좋습니다. 그렇지 않으면 별도의 쿼리를 사용해야합니다. – Blender

+0

기본적으로 이것은 위젯 페이지 용입니다. 10 가지 다른 속성을 가진 10 가지 위젯이 있습니다. 필자의 원래 계획은 switch 문에 의해 결정된 my $ _GET 변수를 기반으로 필자가 필요로하는 정보를 해당 테이블에서 가져 오는 것입니다. 단일 테이블의 데이터를 개별 테이블로 분리하여 유형 변수를 통해 액세스 할 수있는 것이 더 좋을까요? 나는 PHP를 더 잘 다루고 정규화 된 데이터를 한꺼번에 사용하려고 노력하고 있습니다 ... 그것은 압도적 일 수 있습니다. 도와 주셔서 감사합니다. – absentx

답변

4

물론 관련성이 높은 데이터 만 쿼리하는 것이 좋습니다. 데이터베이스를 묶고 네트워크를 통해 더 많은 데이터를 전송 한 다음 PHP에서 더 많은 작업을 수행하여 관심이없는 데이터를 필터링합니다. 그래서 확실히 "모든 것"을 질문하면 안됩니다.

한편, switch에는 이유가 없습니다. 변수 값을 입력 할 수 있도록 쿼리를 다시 작성하는 방법이 있어야하며, 해당 값에 따라 원하는 경우 데이터를 반환합니다. 이것은 물론 데이터베이스 스키마에도 달려 있습니다.

당신이 무엇을할지에 상관없이, 자신을 SQL injection에 노출시키지 않도록주의하십시오.

+0

데이터베이스에서 검색 할 값을 결정하기 전에 스위치를 사용했습니다. 실제'switch' 블록에 쿼리를 넣으면 반복적 인 문장이 생기는 것처럼 느껴지지만 어떤 경우에는 유효성 검사를 위해'switch' 문을 사용하는 데있어 잘못된 것이 없습니다. –

+0

@ JaredFarrish : 변수를 허용 된 값 집합으로 제한하기 위해 개인적으로 '스위치'대신 값 배열을 사용하는 것이 좋습니다. – Jon

+0

좋은 지적입니다. 그것이 일대일이 아니라면 (단지 매치가 일어나는 것 이상이 필요함) 매치의 로직에 달려 있습니다. –

1

물론 switch 문을 쿼리하면 앞에 쿼리하는 것보다 낫습니다.

그러면 쿼리 결과를 저장하는 데 사용되는 메모리가 줄어들고 쿼리 결과를 반복하는 경우와 같이 실행되는 코드가 줄어들 수 있습니다.

3

데이터베이스의 데이터 측면에서 원하는 것을 정확히 보지 않고 말하기는 어렵지만, 때로는 if ... then을 사용하여 SQL 문을 작성하거나 완료된 쿼리를 전환 한 다음 실행합니다.

$sql = 'SELECT * FROM myTable WHERE '; 
switch($_GET['type']){ 
    case 1: 
    $sql += 'somefield="' . mysql_real_escape_string($_GET['param1']) . '"'; 
    break; 
    default: 
    break; 
} 
+0

위험, Will Robinson! SQL 주입! – Jon

+2

해당 SQL 쿼리를 지우거나 * someone *이 웹 응용 프로그램을 종료했는지 확인하십시오. – Blender

+0

미안하지만, 때로는 내가 가장 중요한 것을 잊어 버리는 예를 쓰기가 너무 흥분한다 !!! (데이터를 탈출하기 위해 편집 됨) –

관련 문제