2015-03-26 21 views
-4

Следующий код предназначен для проверки доступности продукта и обновления количества продукта, если продукт доступен. Может ли приведенный ниже код работать правильно, чтобы избежать параллельного обновления? Спасибовопросы о обновлении php mysql

 $query= "START TRANSACTION; select pd_qty from tbl_product where pd_id='$pid' and pd_qty=0"; 
    $result=mysql_query($query) or die(mysql_error()); 
    while ($row=mysql_fetch_array($result)){ 
    shortage=1; 
    } 
    if (shortage!=1)){ 
    $query= "update tbl_product set pd_qty = .......; 
    insert into tbl_order ....; " 
    mysql_query($query) or die(mysql_error()); 
    COMMIT;" 
    } else { 
    $query= "COMMIT;" 
    mysql_query($query) or die(mysql_error()); 
    } 
+0

не может работать, период. php/mysql не разрешают несколько запросов в одном вызове 'query()', поэтому вы не можете запустить транзакцию, а затем сделать свой выбор в том же вызове. и кроме того, вы не заблокировали какие-либо записи, поэтому, несмотря на то, что это транзакция, ничто не остановит параллельный запрос от возиться с записями за вашей спиной. –

+0

Вы спрашиваете, может ли mysql_query выполнять несколько запросов одновременно? – h2ooooooo

+0

Вы всегда должны убедиться, что синтаксис остается в силе, когда вы сокращаете свой код. С одной стороны, в блоке 'if' есть синтаксическая ошибка в' COMMIT; «' и вы не называете 'commit'. –

ответ

0

Я изменил код, как этот, может ли он работать сейчас?

mysql_query('BEGIN'); 
query="select pd_qty from tbl_product where pd_id='$pid' and pd_qty=0 for update"; 
$result=mysql_query($query) or die(mysql_error()); 
while ($row=mysql_fetch_array($result)){ 
shortage=1; 
} 
if (shortage!=1)){ 
$query= "update tbl_product set pd_qty = .......;" 
mysql_query($query) or die(mysql_error()); 
$query= "insert into tbl_order ....; " 
mysql_query($query) or die(mysql_error()); 
} 
mysql_query('COMMIT'); 
Смежные вопросы