我正在尝试使用以下内容更新我的数据库:
$fields = array(
'titulo',
'tipo_produto',
'quantidade_peso',
'unidade_de_venda',
'unidades_por_caixa',
'caixas_piso',
'pisos_palete',
'tipo_palete',
'unidades_palete',
'caixas_palete',
'uni_diametro',
'uni_largura',
'uni_profundidade',
'uni_altura',
'caixa_largura',
'caixa_profundidade',
'caixa_altura',
'altura_palete',
'volume_unidade',
'volume_caixa',
'volume_palete',
'peso_caixa',
'peso_palete'
);
$sql = 'UPDATE ficha_item SET '.implode(', ', array_map(create_function('$value', 'return "$value=\"" . $_POST["$value"] ."\"";'), $fields)).' WHERE id=?';
$stmt = $db->prepare($sql);
$stmt->execute(array($_POST['item_id']));
$stmt->closeCursor();
这似乎工作得很好,但我想知道安全性,这是否经过消毒?
在尝试(没有成功)另一个解决方案后,我想出了这个解决方案:
$fields = array(
'titulo',
'tipo_produto',
'quantidade_peso',
'unidade_de_venda',
'unidades_por_caixa',
'caixas_piso',
'pisos_palete',
'tipo_palete',
'unidades_palete',
'caixas_palete',
'uni_diametro',
'uni_largura',
'uni_profundidade',
'uni_altura',
'caixa_largura',
'caixa_profundidade',
'caixa_altura',
'altura_palete',
'volume_unidade',
'volume_caixa',
'volume_palete',
'peso_caixa',
'peso_palete'
);
$sql = 'UPDATE ficha_item SET ? WHERE id=?';
$valuesClause = implode(', ', array_map(create_function('$value', 'return "$value=\"" . $_POST["$value"] ."\"";'), $fields));
$stmt = $db->prepare($sql);
$stmt->execute(array($valuesClause, $_POST['item_id']));
$stmt->closeCursor();
完全没有错误,但我的数据库不会更新。我的第一个解决方案完全消毒了吗?我最初的想法出了什么问题?我认为这与 PDO 如何在执行时清理查询有关......但我不知道该去哪里。
注意:数据库列名称和输入名称相同,这就是$value
有效的原因。如果您还想知道,由于 PHP 版本是实时的,匿名函数是不可能的。