Jump to content
junior3d

Pq usa-se bindValue ao invés de usar a variável direto na instrução sql

Recommended Posts

Estudo há poucos dias PHP e gostaria de saber no trecho abaixo por que usa-se o bindValue para jogar o conteúdo da variável na sql do método prepare do PDO?

segue o trecho:

$sql = $pdo->prepare("INSERT INTO usuarios (nome, email, telefone, senha) VALUES (:n, :t, :e, :s)");
$sql->bindValue(":n",$nome);
$sql->bindValue(":t",$telefone);
$sql->bindValue(":e",$email);
$sql->bindValue(":s",$senha);
$sql->execute();

Por que não poderia assim?

$sql = $pdo->prepare("INSERT INTO usuarios (nome, email, telefone, senha) VALUES ($nome, $telefone, $email $senha)");
$sql->execute();

 

Share this post


Link to post
Share on other sites
Em 27/06/2020 at 20:00, junior3d disse:

Estudo há poucos dias PHP e gostaria de saber no trecho abaixo por que usa-se o bindValue para jogar o conteúdo da variável na sql do método prepare do PDO?

segue o trecho:

Saiba mais aqui

 

 

Em 27/06/2020 at 20:00, junior3d disse:

 

 poderia assim?


$sql = $pdo->prepare("INSERT INTO usuarios (nome, email, telefone, senha) VALUES ($nome, $telefone, $email $senha)");
$sql->execute();

 

Desta forma use $pdo->query("..."), mas entenda sobre SQL Injection

 

Há outras formas e um pouco menos verbosa, utilizando o prepared statements, ao invés de query.

Passe o array no método execute() da PDO.

$sql = "INSERT INTO usuarios (nome, email, telefone, senha) VALUES (?,?,?,?)";
$stmt= $pdo->prepare($sql);
$stmt->execute([$nome, $telefone, $email, $senha]);

Ou nomeados

 

Prefira sempre o uso de espaços nomeados "placeholders", igual ao exemplo abaixo:

$sql = "INSERT INTO usuarios (nome, email, telefone, senha) VALUES (:n, :t, :e, :s)";
$stmt= $pdo->prepare($sql);
$stmt->execute([":n" => $nome, ":t" => $telefone, ":e" => $email, ":s" => $senha]);

Quando evoluir na linguagem php, verás que a ultima a opção é a melhor para se trabalhar com objetos.
 

 

 

Share this post


Link to post
Share on other sites

O que aprendi ha muitos anos quando comecei a trabalhar com o PHP que respondeu essa e a varias outras perguntas:

 

Nunca confie em input recebidos

 

Em outras palavra... sempre cheque e valide tudo que você receba a partir de input principalmente quando se tratar de queries em bancos de dados.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By andreluis78
      Olá a todos.
      Criei um procedimento para verificar se um usuário está cadastrado no banco de dados.
      Utilizo Firebird como BD e componentes Zeos para acessar o banco.
      Resolvi criar uma query em tempo de execução para fazer a verificação. Não dá nenhum erro, porém, quando digito o nome do usuário no Edit e clico
      no botão que executa o procedimento, ele dá ''usuário inexistente'', mesmo se o nome do usuário estiver cadastrado no banco.
       
      Segue o código:
       
      procedure Tfrm_login.SpeedButton1Click(Sender: TObject); var Qry : TZQuery; begin   Qry:=TZQuery.Create(nil);   Qry.Connection := dm_dados.ZConnection1;  //componente de conexão   Qry.SQL.Add('select codigo, nome, acessar, user, pass from clientes');   Qry.Open;   if Qry.Locate('USER',Edit1.Text,[]) then   begin     ShowMessage('usuário cadastrado');   end   else   begin     ShowMessage('usuário inexistente');     Edit1.SetFocus;   end;   FreeAndNil(Qry); end;  
      Se alguém puder ajudar agradeço desde já.
      Obrigado
    • By diegosrg
      Olá pessoal!
      Preciso de um help por favor.
      Seguinte, tenho uma base de dados abaixo e preciso incluir uma coluna com os valores acumulado do mês independente do produto.Base atual:
      YEARMONTH / PRODUTO/ VALOR 202001 /ABC / 123,00 202001 /DEF / 234,00 202002 /ABC / 289,00 202002 /GHU / 222,00  
      Com a nova coluna ficaria assim:
      YEARMONTH / PRODUTO/ VALOR / VALOR ACUMULADO 202001 /ABC / 123,00 / 357,00 202001 /DEF / 234,00 / 357,00 202002 /ABC / 289,00 / 511 202002 /GHU / 222,00 / 511  
      Alguém tem alguma dica?!
      Desde já agradeço
    • By FabianoSouza
      Pessoal, por que isso não funciona no SQL?
      SET @sql = 'SELECT ' SET @sql = @sql + @status + ' = meuCampo FROM minhaTab' EXEC(@sql) SELECT @status Preciso passar o resultado para a variável @status.
      Como faço??
    • By Diego-SLP
      Bom dia,
       
      Estou passando uma variavel via GET para uma pagina PHP e a SQL não interpreta a mesma.
       
      Se eu printar o numero é exibido, se eu colocar o valor manualmente na SQL ela funciona, porém quando coloco a variavel não exibe nenhum registro, se alguem puder me ajudar.
       
      <?php $id = $_GET['id']; echo $id; $procura = mysqli_query($con,"SELECT p.DATA,p.cod_func,f.nome,f.funcao,p.cod_etapa,p.entrada_1,p.saida_1,p.entrada_2,p.saida_2,p.entrada_3,p.saida_3 FROM rh_pontoFuncionario p, rh_funcionario f WHERE p.cod_func = f.cod AND p.cod_obra = '".$id."' ORDER BY p.id desc") or die (mysqli_error($procura)); while($row = mysqli_fetch_array($procura)){ ?> <tr role="row" class="odd table-sm"> <td class="text-center"> <?php echo date('d/m/Y',strtotime($row['DATA'])); ?> </td> <td class="text-center"><?php echo $row['cod_func'];?></td> <td class="text-center"><?php echo $row['nome'];?></td> <td class="text-center"><?php echo $row['funcao'];?></td> <td class="text-center"><?php echo $row['cod_etapa'];?></td> <td class="text-center"><?php echo $row['entrada_1'];?></td> <td class="text-center"><?php echo $row['saida_1'];?></td> <td class="text-center"><?php echo $row['entrada_2'];?></td> <td class="text-center"><?php echo $row['saida_2'];?></td> <td class="text-center"><?php echo $row['entrada_3'];?></td> <td class="text-center"><?php echo $row['saida_3'];?></td> <td class="project-actions text-center"> <a class="btn btn-warning btn-sm" href="#.php?id=<?php echo $row['id']; ?>"> <i class="fas fa-pencil-alt"> </i> </a> <a class="btn btn-danger btn-sm" href="#.php?id=<?php echo $row['id']; ?>"> <i class="fas fa-trash-alt"> </i> </a> </td> </tr> <?php }//while ?>  
    • By Diego-SLP
      Bom dia,
       
      Teria como eu fazer um UPDATE na minha base colocando através de um FORM o VALOR_UNITARIO sendo que a QUANTIDADE já tenho na base de dados, e assim, atualizar o campo VALOR FINAL já? 
       
      Vou atualizar varios registros de uma vez.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.