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 に答える