1

次のPDO接続クエリを使用する必要があります。

$fields = array(
        'titulo',
        'tipo_produto',
        'quantidade_peso',
        'unidade_de_venda',
        'unidades_por_caixa',
        'caixas_piso',
        'pisos_palete',
        'tipo_de_palete',
        'unidades_palete',
        'caixas_palete',
        'uni_diametro',
        'uni_largura',
        'uni_profundidade',
        'uni_altura',
        'uni_peso_bruto_unidade',
        'caixa_largura',
        'caixa_profundidade',
        'caixa_altura',
        'altura_palete',
        'volume_unidade',
        'volume_caixa',
        'volume_palete',
        'peso_caixa',
        'peso_palete'
    );
    $sql = 'INSERT INTO ficha_item ( %s ) VALUES ( %s )';
    $fieldsClause = implode(', ', $fields);

    $valuesClause = implode(', ', array_map(function($value) {
                        return ':' . $value;
                    }, $fields));

    $sql = sprintf($sql, $fieldsClause, $valuesClause);

    $stmt = $db->prepare($sql);

    $stmt->execute(array_intersect_key($_POST, array_flip($fields)));

これは私に次のエラーを返していました:

Parse error: syntax error, unexpected T_FUNCTION, expecting ')'

少し掘り下げてみると、匿名関数はPHP 5.3でのみ実装されているようです。これを5.2で機能させるには、create_functionを使用する必要があります。PHPはまだかなり新しいので、正しいものを見つけるのに問題があります。ここでの構文では、$value変数とそれをcreate_functionに正しく実装する方法もよくわかりません。

ここでいくつかのヘルプ、またはcreate_functionの代替を探しています。

4

2 に答える 2

4
$valuesClause = implode(', ', array_map(function($value) {
                    return ':' . $value;
                }, $fields));

への変更:

$func = create_function('$value', 'return ":" . $value;');
$valuesClause = implode(', ', array_map($func, $fields));
于 2012-12-31T12:24:48.610 に答える
3

通常の関数を作成する方が良い

function prefixWithColon($value) {
    return ':' . $value;
}

その名前をコールバックとして使用します

$valuesClause = implode(', ', array_map('prefixWithColon', $fields));
于 2012-12-31T12:25:45.217 に答える