LOCK TABLE & UNLOCK : query non funzionante

Ciao Gianni sto avendo un piccolo problema

in pratica devo inserire diversi dati in due tabelle

inserisco un ordine nella tabella degli ordini

LOCK TABLE ordini

prendo l'id ( mysql_insert_id ) per avere l'id dell'ordine appena inserito

inserisco i dati dei prezzi in una tabella collegata alla prima con l'id dell'ordine ( visto che tra loro c'è una ralazione del tipo 1:n )

insert multiplo nella tabella dei prezzi

UNLOCK TABLES

il codice è questo :

<?php

      $ip      = ip2long($_SERVER['REMOTE_ADDR']);

      $date   = time();

      $query   = "INSERT INTO `sm_orders` (`usid`, `status`, `orderdate`, `ip`, `anid`)"

            . " VALUES ('" . $_SESSION['smUsid'] . "', 1, '" . $date . "' ,'" . $ip . "', '" . $anid . "')";

      $exec   = mysql_query($query);

            

      $id      = mysql_insert_id();

      

      $lock   = mysql_query("LOCK TABLE `sm_orders` WRITE");

      

      if($exec && $lock){

         unset($exec, $query);

         $query = "INSERT INTO `sm_orderprice` (`prid`, `ordid`) VALUES ";

         $count = count($values);

         $i = 1;

         

            foreach($values as $prid){

            

               $comma = ($i < $count) ? ',' : '';

               

               $query .= "(" . (int) $prid . "," . $id . ")" . $comma;

               

               $i++;

            }

            

         $exec  = mysql_query($query);

         $unlock= mysql_query("UNLOCK TABLES");

?>

provando la query insert in prezzi dal query browser : tutto ok

ma dal codice viene inserito solo l'ordine.

eliminando il lock delle tabelle la query funziona.

 :bye:

inviato 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Perché usi il LOCK TABLE?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

perchè non potrebbe succedere che due utenti stanno facendo la cosa nello stesso istante?

e quindi credo che bloccando le tabelle per n secondi, cioè finché non sono inseriti gli ordini di tizio 1, tizio 2 non può fare nulla.

insomma in modo che l'insert ID sia esattamente quello dell'ordine di tizio 1, non di tizio 2

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

l'insert_id si riferisce all'ultima query della connessione corrente (relativa allo script corrente e quindi all'utente corrente). Non hai bisogno di usare il lock.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda