我必须使用以下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的替代品。
答案 0 :(得分:3)
$valuesClause = implode(', ', array_map(function($value) {
return ':' . $value;
}, $fields));
更改为:
$func = create_function('$value', 'return ":" . $value;');
$valuesClause = implode(', ', array_map($func, $fields));
答案 1 :(得分:3)
更好地创建正常功能
function prefixWithColon($value) {
return ':' . $value;
}
并将其名称用作回调
$valuesClause = implode(', ', array_map('prefixWithColon', $fields));