数组映射函数错误

时间:2012-10-18 20:14:27

标签: php mysql arrays error-handling

我收到一条错误消息,说这段代码需要括号但是到目前为止它还没有出现问题,这是完整的错误消息:

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']
)));

2 个答案:

答案 0 :(得分: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']
)));

但是你最好按照NullUserException ...

的建议使用PDO

答案 1 :(得分:2)

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);

更容易,更清洁和普遍理解。您的参数将自动转义。