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

2 回答 2

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 ...

于 2012-10-18T20:19:52.473 回答
2

匿名函数是在 5.3.0 中引入的,所以如果你有旧版本的 PHP,你会遇到这个错误。做你正在做的事情的另一种方法是使用create_function()

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

但更好的选择是使用 PDO 和参数化查询

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

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

于 2012-10-18T20:31:11.747 回答