2009-06-01 6 views
13

다른 함수 모두 인수 :패스 I는 다음과 같이 두 가지 기능을 가질

function mysql_safe_query($format) { 
    $args = array_slice(func_get_args(),1); 
    $args = array_map('mysql_safe_string',$args); 
    $query = vsprintf($format,$args); 
    $result = mysql_query($query); 
    if($result === false) echo '<div class="mysql-error">',mysql_error(),'<br/>',$query,'</div>'; 
    return $result; 
} 

function mysql_row_exists() { 
    $result = mysql_safe_query(func_get_args()); 
    return mysql_num_rows($result) > 0; 
} 

문제는 배열로 첫번째로 인수를 전달하기 때문에이 예상 될 때 제 기능이 작동하지 않을 것이다 그들을 다른 매개 변수로. 이 문제를 해결할 수있는 방법이 있습니까? mysql_safe_query을 수정하지 않는 것이 좋습니다. 또한 당신을 위해 작동 할 수 있습니다 조금 더 빠를 수 있습니다 다음과 같은 상황에 따라

$args = func_get_args(); 
call_user_func_array('mysql_safe_query', $args); 

답변

21

방법. 지금 전화의 두 가지 유형이 가능하지만 첫 번째 값이 실제 배열 있어야하는 경우는 어느 쪽이든을 압축 해제 될 수 있기 때문에, 문제가 될 수

function mysql_safe_query($format) { 
    $args = func_get_args(); 
    $args = is_array($args[0]) ? $args[0] : $args; // remove extra container, if needed 
    // ... 

.

루트 배열의 길이를 추가로 확인할 수 있으므로 다른 요소가있는 경우 언급 한 바와 같이 풀지 않을 수 있습니다. 일반적으로 "깨끗한"것은 아니지만 도움이 될 수 있습니다. 빨리 :-)

+3

http://uk.php.net/func_get_args 메시지 : "참고 :이 기능은 매개 변수 세부 정보를 결정하기 위해 현재 범위에 의존하기 때문에 함수 매개 변수로 사용할 수 없습니다.이 값을 전달해야하는 경우 결과 변수에 할당되어야하며 그 변수는 전달되어야합니다. " – VolkerK

+0

완벽! @volker :이 경우 문제가되지 않는 것 같습니다. – mpen

+0

@volker : err..nevermind. 네가 옳아. 그것은 지난 번에 불평하지 않았지만 지금은 그렇습니다. 나는 경고에 복종하는 것이 낫다고 생각한다. – mpen

0

: 사용에 대한

3

NB PHP 5.6에서는 지금이 작업을 수행 할 수 있습니다

function mysql_row_exists(...$args) { 
    $result = mysql_safe_query(...$args); 
    return mysql_num_rows($result) > 0; 
} 

는 또한, 미래의 독자, mysql_로 *이되지 않습니다 - 이러한 기능을 사용하지 마십시오.

관련 문제