source

MySql 트랜잭션은 콘솔에서만 작동합니다.

ittop 2023. 9. 4. 20:39
반응형

MySql 트랜잭션은 콘솔에서만 작동합니다.

이것을 MySql 콘솔에 붙여넣을 때

START TRANSACTION;
INSERT INTO `orders` (customer_id) VALUES ('2');
SET @lastid=LAST_INSERT_ID();
INSERT INTO `transactions`
    (order_id,product_id,product_quantity,price,ammount,customer_id)
    VALUES (@lastid,'3','2','4','4','2');
INSERT INTO `transactions`
    (order_id,product_id,product_quantity,price,ammount,customer_id)
    VALUES (@lastid,'1','3','5','4','2');
COMMIT;

제가 php를 통해 동일하게 하려고 할 때 잘 작동합니다.

$sql = "START TRANSACTION;";
$sql .="INSERT INTO `orders` (customer_id) VALUES ('$customer_id_form');";
$sql .="SET @lastid=LAST_INSERT_ID();";
foreach ($product_id_form as $key => $product){
$sql .= "INSERT INTO `transactions`
    (order_id,product_id,product_quantity,price,ammount,customer_id) 
    VALUES 
    (@lastid,'$product','$quantity_form[$key]',
        '$price_form[$key]','$amount_form[$key]','$customer_id_form');";
}
$sql .= "COMMIT;";
//$sql = "INSERT INTO products (`product_name`,`curent_price`,`product_quota`) VALUES ('$productname_form','$productprice_form','$productquote_form')";

if ($con->query($sql) === TRUE) {
    echo "New record created successfully";
   header("Location: order.php");
} else {
    echo "Error: " . $sql . "<br>" . $con->error;
}
mysqli_close($con);

작동하지 않음 오류는 다음과 같습니다.

SQL 구문에 오류가 있습니다. 'INSERT INTO' 근처에서 사용할 올바른 구문은 MariaDB 서버 버전에 해당하는 설명서를 참조하십시오.orders(customer_id) 값('2');SET @lastid=LAST_INSERT_ID();라인 1의 INS'

쿼리를 한 번에 하나씩 수행합니다. 한 번에 모두 서버로 보내지 마십시오.START...COMMIT트랜잭션 의미론을 결정합니다.

다중 쿼리를 실행하려면 multi_query가 필요할 것 같습니다.

언급URL : https://stackoverflow.com/questions/41786586/mysql-transaction-works-only-in-console

반응형