Error adding "0" to a tinyint (1) field in the database

1

In my database in the users table, I have a field called status, whose type is tinyint (1). If the status is "0" the user is activated (can access the site), if the status is "1", disabled. But when doing an INSERT and set the status="0" of the error.

  

My question is, why does this happen, and how do I get it to accept 0.

The strangest thing is that I have already developed other sites, which use this same logic and accept the "0"

Follow the code:

  

Cogigo that is in the page of users:

    $tabela = "usuarios";
    $dados = array(
        'usuario' => $p_usuario,
        'senha' => $hash_senha,
        'status' => "0",
        'permissao' => "0",
        'data_criacao' => $data_modificacao,
        'data_modificacao' => $data_modificacao
    );
    $sql_ins_usuarios_resultado = adicionar($tabela, $dados);
  

Code that stays on another page called by function:

// Armazenas os dados do array
$adc_campos = array_keys($adc_dados);
// contagem dos campos existentes
$adc_n_campos = count($adc_dados);
// Inicia a sintaxe
$adc_sintaxe = "INSERT INTO ".$adc_tabela." (";
//monta o resto da estrutura
for($adc_aux=0; $adc_aux<$adc_n_campos; $adc_aux++){
    $adc_sintaxe.= $adc_campos[$adc_aux].", ";
}
//retira a ultima virgula
$adc_sintaxe = substr($adc_sintaxe, 0, -2);
// fecha os campos e adciona o VALUES na sintaxe
$adc_sintaxe .= ") VALUES (";
//adiciona os valores na sintaxe
for($adc_aux=0; $adc_aux<$adc_n_campos; $adc_aux++){
    $adc_sintaxe.= ":".$adc_campos[$adc_aux].", ";
}
// Retira a ultima virgula
$adc_sintaxe = substr($adc_sintaxe, 0, -2);
// Fim da sintaxe
$adc_sintaxe .= ")";
// chama a função global para fazer conexão com o Banco de dados
global $conexaobd;
// prepara a sintaxe
$adc_preparado = $conexaobd->prepare($adc_sintaxe);
// seta os valores de cada campo
for($adc_aux=0; $adc_aux<$adc_n_campos; $adc_aux++){
    if(!$adc_dados[$adc_campos[$adc_aux]]){
        $adc_dados[$adc_campos[$adc_aux]] = NULL;
    }
    $adc_preparado -> bindParam(":".$adc_campos[$adc_aux], $adc_dados[$adc_campos[$adc_aux]]);
}
return $adc_preparado->execute();
//Para debugar o código (retirar o return do $adc_preparado->execute()
        /*-->*/  //  $adc_preparado->debugDumpParams();
  

When triggering debugDumpParams () the syntax is as follows:

INSERT INTO usuarios (usuario, senha, status, permissao, data_criacao, data_modificacao) VALUES (:usuario, :senha, :status, :permissao, :data_criacao, :data_modificacao) Params: 6 Key: Name: [8] :usuario paramno=-1 name=[8] ":usuario" is_param=1 param_type=2 Key: Name: [6] :senha paramno=-1 name=[6] ":senha" is_param=1 param_type=2 Key: Name: [7] :status paramno=-1 name=[7] ":status" is_param=1 param_type=2 Key: Name: [10] :permissao paramno=-1 name=[10] ":permissao" is_param=1 param_type=2 Key: Name: [13] :data_criacao paramno=-1 name=[13] ":data_criacao" is_param=1 param_type=2 Key: Name: [17] :data_modificacao paramno=-1 name=[17] ":data_modificacao" is_param=1 param_type=2
    
asked by anonymous 03.08.2017 / 00:38

1 answer

2

What you could do is the following return the 0 as String "0" equal here 'status' = > "0", "permission" = > "0" and within that if you did make this check

if(!$adc_dados[$adc_campos[$adc_aux]]){ 


   if($adc_dados[$adc_campos[$adc_aux]] == "0" ){ 
      $adc_dados[$adc_campos[$adc_aux]] = 0 
    } 

 $adc_dados[$adc_campos[$adc_aux]] = NULL; 
 } 

and put this on else

$adc_dados[$adc_campos[$adc_aux]] = NULL;
    
03.08.2017 / 14:25