2011-09-30 2 views
7

누군가가 참조 용으로 키를 전달할 수없는 이유를 설명 할 수 있습니까?키와 값을 모두 전달할 수있는 대안 참조 :

예 :

if(is_array($where)){ 
    foreach($where as &$key => &$value){ 
     $key = sec($key); 
     $value = sec($value); 
    } 
    unset($key, $value); 
} 

예외 :

Fatal error: Key element cannot be a reference in linkstest.php on line 2 

내가 array_map 사용하여 비슷한 일을 할 수 있습니까? 연관 배열을 반복하고 내 sec() 함수를 사용하여 키와 값을 모두 이스케이프 처리하면됩니다. 나를 이해하는

배열지도가 어렵다 : 나는 array_map 많은 일을 시도하지만, 내가 직접 키를 작동 얻을 수 없습니다

.

foreach 루프를 사용하는 것보다 배열 맵을 사용하여 성능 이점을 얻을 수 있습니까? 내가 foreach 문에 대해 좋아하지 않는 무엇

내가 직접 배열에 따라 행동 및 임시 배열을 생성하고이를 설정 해제 처리하지 수 있다는 것입니다 :

foreach($where as $key => $value){ 
$where[secure($key)] = secure($value); 
} 

뭔가를 발견하면이 실패 할 수 있습니다 키에서 벗어나고, 새로운 요소를 추가하고, 이스케이프 처리되지 않은 요소를 유지합니다.

그래서 이런 식으로 붙어 있습니까?

$temparr = array(); 
foreach($where as $key => $value){ 
$temparr[secure($key)] = secure($value); 
} 
$where = $temparr; 
unset($temparr); 

어떤 대안이 있습니까?

+0

큰 오래된 * 왜 * 자격이 필요합니까? 'sec ($ key)'가 다른 기존 키의 값을 얻는다면 어떨까요? 기존 키를 덮어 쓰시겠습니까? 응용 프로그램에서 키가 위험 할 수있는 이유를 설명해야합니다. – webbiedave

+0

왜 위험 할 수 없습니까? 양식이나 Tamperdata와 같은 것으로 $ _POST 키를 쉽게 변경할 수 있습니다. mysql 쿼리에 사용하는 일부 키. – Ben

+0

나는 그럴 수 없다고 말하지 않았다. 나는 당신의 응용 프로그램에서 열쇠가 왜 위험 할 수 있는지 설명 할 필요가 있다고 말했다. 그것은 우리에게 귀하의 상황에 가장 적합한 접근 방법을 알려줄 것입니다. – webbiedave

답변

8

당신이 참고로 키를 전달할 수없는 이유를 누군가가 나에게 설명 할 수 있습니까?

이 언어는이 기능을 지원하지 않기 때문에. 이 기능을 대부분의 언어로 사용하는 것은 어렵습니다. 따라서 이라는 용어를 사용하십시오.

그래서 이런 식으로 붙어 있습니까?

예. 가장 좋은 방법은 해당 키를 사용하여 새 배열을 만드는 것입니다.

대체 방법?

더 나은 대안을 제공하는 유일한 방법은 특정 상황을 파악하는 것입니다. 키가 테이블 열 이름에 매핑되는 경우 가장 좋은 방법은 키를 그대로두고 SQL 사용시 이스케이프 처리하는 것입니다.

0

왜 그렇게하는 것이 좋습니까? 함수로 만드십시오. 함수는 입력을 받아서 출력을줍니다. 함수 입력은 "보안되지 않은"배열이됩니다. 결과물은 배열을 확보 한 결과입니다.

그런 다음 당신은 그냥

$where = secureMyArray($where); 

을 당신이 기능을 할 수있는 능력을 가지고 왜 ...이다

관련 문제