-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());
}
не может работать, период. php/mysql не разрешают несколько запросов в одном вызове 'query()', поэтому вы не можете запустить транзакцию, а затем сделать свой выбор в том же вызове. и кроме того, вы не заблокировали какие-либо записи, поэтому, несмотря на то, что это транзакция, ничто не остановит параллельный запрос от возиться с записями за вашей спиной. –
Вы спрашиваете, может ли mysql_query выполнять несколько запросов одновременно? – h2ooooooo
Вы всегда должны убедиться, что синтаксис остается в силе, когда вы сокращаете свой код. С одной стороны, в блоке 'if' есть синтаксическая ошибка в' COMMIT; «' и вы не называете 'commit'. –