我收到一条错误消息,说这段代码需要括号但是到目前为止它还没有出现问题,这是完整的错误消息:
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']
)));
答案 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);
更容易,更清洁和普遍理解。您的参数将自动转义。