2012-10-18 71 views
1

我得到一個錯誤說這個代碼需要一個括號,但每一次,到目前爲止還沒有想出了一個問題之前,這裏是完整的錯誤消息:陣圖功能錯誤

Parse error: syntax error, unexpected T_FUNCTION, expecting ')' 

這裏是我的代碼:第一行是說錯誤在哪裏:

$escaped_values = join(',', array_map(function($v) { 
return "'" . mysql_real_escape_string($v) . "'"; 
}, array(
$_POST['account_status'], 
$activation_key, 
$_POST['first_name'], 
$_POST['last_name'], 
$_POST['email'], 
$_POST['username'], 
$password, 
$_POST['phone_number'] 
))); 
+3

您使用的是哪個版本的PHP? [匿名函數](http://php.net/manual/en/functions.anonymous.php)是在5.3.0中引入的,所以如果你有一個老版本的PHP,你會遇到這個錯誤。另一方面,你是否考慮過使用PDO的[參數化查詢](http://www.php.net/manual/en/pdo.query.php)?更簡單,更清潔和普遍理解。 – NullUserException

+0

@Alfabravo我正在運行更高版本(5.2.17) – maxgee

回答

3

聽起來就像您使用的是舊版本的PHP不支持閉包。它們可以作爲PHP 5.3使用老式的命名函數實例的

function escape($v) 
{ 
    return "'" . mysql_real_escape_string($v) . "'"; 
} 

$escaped_values = join(',', array_map('escape', array(
    $_POST['account_status'], 
    $activation_key, 
    $_POST['first_name'], 
    $_POST['last_name'], 
    $_POST['email'], 
    $_POST['username'], 
    $password, 
    $_POST['phone_number'] 
))); 

但是你最好用它做PDO通過NullUserException的建議......

+0

是的,我只是意識到我正在運行5.2.17 – maxgee

+0

我該如何修復代碼才能使其工作? – maxgee

+0

使用一個老式的命名函數,並將該函數的名稱作爲字符串傳遞給'array_map'的第一個參數,請參閱手冊中的示例:http://php.net/array_map – ndm

1

Anonymous functions分別推出5.3.0,所以如果你有一個老版本的PHP,你會遇到這個錯誤。另一種方式做你正在做的事情是它使用create_function()

array_map(create_function('$v', 'return "\'" . mysql_real_escape_string($v) . "\'";') 
      , $yourArray) 

但更好的替代方法是使用PDO和parameterized queries

// example: 
$sth = $dbh->prepare('INSERT INTO your_table 
          (activation_status, first_name, last_name) 
          VALUES (?, ?, ?)'); 

$params = array($activation_status, $_POST['first_name'], $_POST['last_name']); 
$sth->execute($params); 

更方便,更清潔,普遍理解。你的參數將被自動轉義。

+0

PDO可能比在任何地方使用mysql_real_escape_string更容易。 – tadman