-1
I have a PHP function where I pass the data to it and the same gives an UPDATE in the data. however I am doing security against SQL INJECTION, only that it is not working what would be the problem? Follow the code of 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();
}
OBS.: 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'
With
prepare
theupdate
normally looks like the following :update tabela set campo1=?, campo2=?...
– Isac
When do you apply the validation of SQL INJECTION? The code snippet that posted only mounts the query.
– DNick
Read: How to prevent SQL code injection into my PHP code
– Wallace Maxters
@Djalmamanfrin I am first redoing my functions, then I will work with validations
– Gabriel Filippi