Jump to content
MAKAVELIQUE

UPDATE NO MESMO INSTANTE

Recommended Posts

Pessoal, imaginem a seguinte situação: o usuário A clica no botão enviar no mesmo instante que o usuário B, caso a ação do sql seja um comando update no mesmo campo, id=7 por exemplo e isso acontecer exatamente no mesmo instante, ocorre perca de dados? 

<?php
$update = "UPDATE br_gang SET i='$i', data= NOW() WHERE id='$id'";
$query = mysqli_query($update, $conn) or die (mysqli_error($conn));
if($update==true){
echo "<script>alert ('DADOS SALVOS COM SUCESSO, BOA SORTE!');</script>";
}
?>

Se isso acontecer e ocorrer perca de dados, qual o procedimento possível para resolver o problema?

Share this post


Link to post
Share on other sites
Em 22/02/2019 at 09:15, Motta disse:

Valeu Motta, eu nem sabia que existia isso aí, li os documentos e compreendi só um pouco assim no primeiro momento...

Então é só colocar aquele FOR UPDATE ali e estará tudo certo? Mais uma vez, valeu!

<?php
$SELECT = "SELECT  id, i, data FROM br_gang FOR UPDATE";
$maka = mysqli_query($SELECT, $conn) or die(mysqli_error($conn));

$update = "UPDATE br_gang SET i='$i', data= NOW() WHERE id='$id'";
$query = mysqli_query($update, $conn) or die (mysqli_error($conn));
if($update==true){
echo "<script>alert ('DADOS SALVOS COM SUCESSO, BOA SORTE!');</script>";
}
?>

 

Share this post


Link to post
Share on other sites

O FOR UPDATE impede uma leitura suja

 

User A troca o ID 1234 , campo X de 1 para 2.

Se o For Udp se o ustio B tentar ler este registro lerá 1 no campo X , com o Upd não lerá até que o COMMIT seja feito e não consiguirá outro FOR UPD.

 

Share this post


Link to post
Share on other sites
<?php
require("config/dbconnection.php");

mysqli_autocommit ( $conexao , false ); 

if ( $resultado = mysqli_query ( $conexao , "SELECT @@autocommit" )) { 
$linha = mysqli_fetch_row ( $resultado ); 

if($linha[0]==0){
	
$update = "UPDATE br_gang SET i='$i', data= NOW() WHERE id='$id'";
$query = mysqli_query($update, $conexao ) or die (mysqli_error($conexao));
if($update==true){
echo "<script>alert ('DADOS SALVOS COM SUCESSO, BOA SORTE!');</script>";

}
}
mysqli_free_result ( $resultado ); 
} 
mysqli_close ( $conexao  ); 

?>

Ta complicado compreender isso, então tenho de definir mysqli_autocommit= false pra poder fazer UPDATE? Esse script aí vai funcionar para que não ocorra parca de dados?

Share this post


Link to post
Share on other sites

Com autocommit false a aplicação deve dar o commit , leia conceito de transactions , exemplo comum transferir dinheiro de uma conta a outra , dois upds , ou faço ambos ou não faço nenhum.

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 Sapinn
      Tô fazendo esse forum pq não achei nada que me ajudasse. Tenho um site em que os professores dão temas para as usuarios produzirem textos, basicamente um site de historias. Preciso que o aluno saiba se ja fez um texto sobre aquele determinado tema. Sendo assim tenho duas tabelas no meu banco usuario que cadastra todos os usarios e historia que tem o tema. Quando o aluno vai enviar a historia automaticamente envia seu email. O que eu realmente quero é comparar se o email existe nas duas tabelas se sim ele retorna já foi feito se não ele retorna Nada feito ainda.
    • By Kellyfer
      Ola estou tentando publicar imagens multilas usando o comando FOR mas nao estou acertando, alguem poderia me ajudar??
      /*script*/
      <?php 
      date_default_timezone_set('America/Sao_Paulo');
      session_start();?> 
      <!DOCTYPE html>
      <html lang="pt-br">
      <head>
          <meta charset="utf-8">
          <title>Upload de Imagens</title>
      </head>
      <body>
      <!--FORMULÁRIOS-->
      <form action="upload.php" method="post" enctype="multipart/form-data">
          <input type="file" name="arquivos[]" multiple required>
          <input type="submit" value="Publicar">
      </form>
      <p>
      <?php 
      if(isset($_SESSION['erro'])):
          echo $_SESSION['erro'];
          session_unset();
      elseif(isset($_SESSION['sucesso'])):
          echo $_SESSION['sucesso'];
          session_unset();
      endif;
      ?>
      </p>
      <?php 
      /*MOSTRANDO AS IMAGENS NA TELA*/
      $utf8 = header("content-type:text/html;charset= utf-8");
      $conn = new mysqli('localhost','thesim','xthesimx1986','db_galeria');
      $conn->set_charset("utf8");
      $busca_image = "SELECT id, nome_arquivo FROM tb_upload  ORDER BY id DESC";
      $res = mysqli_query($conn, $busca_image);
       if(mysqli_num_rows($res) <= '0'){
           echo "Nenuma imagem encontrada!";
       }else{
           while($res_pos =mysqli_fetch_array($res)){
               $nome_arquivo    =$res_pos[0];
      for($c=0; $c>=10; $c++);
      print "<div class='foto'><img src='uploads/$nome_arquivo$c</div>";
      }
      }
      ?>
      </body>
      </html>
      Imagens anexadas



    • By tatysouzac
      Minha view:
      <div>                            
                                          <form method="post" action="http://localhost/integradorcode/index.php/welcome/validar">
                                          EMAIL: <input type="text" name="email"  /> <br><br>
                                          SENHA:  <input type="password" name="senha"/> <br><br><br><br>
                                          <input class="myButton" type="submit" value="Entrar"/> <br><br>
                                          </form>
                                          <a href="Cadastro.php" class="myButton">Cadastrar</a><br><br>
                                          <a href="#" class="myButton">Esqueceu sua senha?</a>
               </div>
       
       
       
      Controller:
       
          public function validar(){
              //var_dump($_POST);
              $this->load->model("Cadastro_model");
              $result = $this->Cadastro_model->validar($_POST["email"],md5($_POST["senha"]));
              var_dump($result);
          }
       
       
      Model:
       
          function validar($email, $senha){
              return $this->db->query("SELECT * FROM `cadastro_clientes` WHERE email_cliente = '{$email}'  AND senha_cliente = '{$senha}' AND status = 1 LIMIT 1")->result_array();
          }
       
       
      Não da nenhuma mensagem de erro mas coloco senha e login certos do meu bd e o return não retorna nada array 0 
    • By MateusOFCZ
      Olá, estou desenvolvendo um projeto de registro de clientes em java no netbeans e usando o MySQL Workbench e Xampp, gostaria de saber se é possível fazer com que o programa fique verificando se está conectado com o banco de dados, e caso não esteja ele mostra uma mensagem pedindo para o usuário se conectar em uma rede, caso ele se conecte o programa irá esconder essa mensagem e funcionará normalmente.

      Eu consegui fazer com que ele mostre se está conectado ou não, porém se eu desligar o servidor ele não atualiza mostrando que está offline, ele continua como online...
    • By terra
      Olá,
       Tenho esse codigo
       
      e gostaria de chamar  bairro = dados.address.suburb; aqui nesse função 
       
       
      Agradeço qualquer ajuda
×

Important Information

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