2012-10-18 46 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