2015-01-27 4 views
0

다음 스크립트array_map() 폐쇄와 PHP에서 예상치 못한 T_FUNCTION 오류를 줄 5.4

/** 
* Insert into DB using locally protected bind_and_execute() function. 
* Using Preparing Statements, thus following the OWASP Standard 
* @see https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet Reference source. 
* @see MySQL::bindAndExecute() bindAndExecute() 
* 
* @param string $table The name of the table (without prefixes). 
* @param array $values The value arrays in {name} => {value} pairs. 
* 
* @return array The newly insterted element. 
*/ 
final public function insert($table, $values) 
{ 
    $cols = implode(', ', array_keys($values)); 
    $vals = implode(', ', array_map(function($value) { return ":$value"; }, array_keys($values))); 
    $query = "INSERT INTO " . TABLE_PREFIX . $table . " ($cols) VALUES ($vals)"; 

    return $this->bindAndExecute($query, $values); 
} 

...이 오류를 던지고 것은 :

Parse error: syntax error, unexpected T_FUNCTION, expecting ')' in [obscured].php on line [169]

이 때문에 array_map() 기능입니다 . 나는 그것을 옮겼다. 그리고 익명 함수 (또는 closure)를 쓰고 있기 때문에 그것을 믿는다. 무슨 일이야? PHP5.4는 이것을 허용해야합니다! 그건 그렇고 PHP5.5와 함께 2 개의 다른 서버에이 스크립트를 설치했고 둘 다 작동했습니다.

미리 도움을 주셔서 감사합니다.

+0

를 사용하여 누락, 당신은 익명 함수를 만들 필요가 없습니다하지만 당신은 단지 하나를 추가 할 수 있습니다 클래스. 이렇게하면 오류가 사라집니다. 공유하는 것은 의미가 없으므로 (코드는 구문이 정상입니다), 이것은 곧장 앞으로 나아갈 수있는 해결책 일 수 있습니다. – hakre

답변

0

당신은 당신이 거기 글로벌 정적 기능을 가지고 같이 )

은 아래 라인

$vals = implode(', ', array_map(function($value) { return ":$value"; }, array_keys($values))); 
+0

불량, 편집 오류입니다. 실제 코드는 작성한 것과 정확히 같습니다. – BlackBeltScripting

+0

@BlackBeltScripting 당신이 더 많은 코드를 추가 할 수 있습니다, 그것은 오류가 어디 있는지 알기가 매우 어렵습니다. 그렇습니다. PHP 5.4는 익명 함수 – sanjeev

+0

을 지원합니다. 모두 OO입니다. 나는 당신에게 입출력 기대치를 보여줄 수있다. '$ table'은'users'와 같은 문자열이고'$ values'는'array ("id"=> "1", "name"=> "John")'과 같은 배열이고' 관심있는 것은 단순히 '사실'일 수 있습니다. '$ query'는 다음과 같은 매개 변수를 가지고 있다면 이렇게 보일 것입니다 :'INSERT INTO pref_users (id, name) VALUES (: id, : name)' – BlackBeltScripting