I have a PHP function where I pass the data to it and the same as an UPDATE in the data. but I'm doing security against SQL INJECTION, but it's not working what would be the problem? Here is the code for the function:
function alterar($upd_tabela, $upd_condicao, $upd_dados){
# Armazenas os dados do array
$upd_campos = array_keys($upd_dados);
# contagem dos campos existentes
$upd_n_campos = count($upd_dados);
//Armazena as condicoes existentes que serão inseridas no WHERE
$upd_campos_condicao = array_keys($upd_condicao);
//conta quantas condições são existentes
$upd_n_condicao = count($upd_condicao);
// Inicia a sintaxe
$upd_sintaxe = "UPDATE ".$upd_tabela." SET ";
//monta o resto da estrutura
for($upd_aux=0; $upd_aux<$upd_n_campos; $upd_aux++){
$upd_sintaxe.= $upd_campos[$upd_aux]."=".$upd_campos[$upd_aux].", ";
}
//retira a ultima virgula
$upd_sintaxe = substr($upd_sintaxe, 0, -2);
//abre o WHERE
$upd_sintaxe.= " WHERE ";
//adiciona as condições
for($upd_aux=0; $upd_aux<$upd_n_condicao; $upd_aux++){
$upd_sintaxe.= $upd_campos_condicao[$upd_aux]."=".$upd_campos_condicao[$upd_aux]." ";
}
//chama a função global para fazer conexão com o Banco de dados
global $conexaobd;
//prepara a sintaxe
$upd_preparado = $conexaobd->prepare($upd_sintaxe);
//sera os valores de cada campo
for($upd_aux=0; $upd_aux<$upd_n_campos; $upd_aux++){
if(!$upd_dados[$upd_campos[$upd_aux]]){
echo $upd_dados[$upd_campos[$upd_aux]] = NULL;
}
$upd_preparado -> bindParam(":".$upd_campos[$upd_aux], $upd_dados[$upd_campos[$upd_aux]]);
}
//seta os valores de cada condição
for($upd_aux=0; $upd_aux<$upd_n_condicao; $upd_aux++){
if(!$upd_condicao[$upd_campos_condicao[$upd_aux]]){
echo $upd_condicao[$upd_campos_condicao[$upd_aux]] = NULL;
}
$upd_preparado -> bindParam(":".$upd_campos_condicao[$upd_aux], $upd_condicao[$upd_campos_condicao[$upd_aux]]);
}
//executa e retorna o UPDATE
return $upd_preparado->execute();
//Para debugar o código
$upd_preparado->debugDumpParams();
}
NOTE: When giving an echo in the syntax, the following appears: SQL: [44] UPDATE Categories SET Name = Name WHERE id = id
Params: 2 Key: Name: [5] :nome paramno=-1 name=[5] ":nome" is_param=1 param_type=2 Key: Name: [3] :id paramno=-1 name=[3] ":id" is_param=1 param_type=2'