现在已经坚持了几个小时,我是服务器开发的新手,所以请对我很轻松。
当我尝试运行下面的代码时,我收到以下SQL错误:
错误:
SET AUTOCOMMIT=0;
START TRANSACTION;
BEGIN;
INSERT
INTO orders (firstname, lastname, spots, order_id)
VALUES ('NAME', 'NAME', 5, '20170718-FC5E8');
INSERT
INTO orders_info (order_id, ip, user_agent)
VALUES ('20170718-FC5E8', '', 'browser');
COMMIT;
您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以便在第1行
'START TRANSACTION; BEGIN; INSERT INTO orders (firstname, lastname, spots, order_'
附近使用正确的语法
我想要做的是将数据插入两个不同的表中,我遇到了很大的麻烦。我正在尝试将数据插入到订单和orders_info中,为此我正在使用此查询代码:
$sql = "SET AUTOCOMMIT=0; START TRANSACTION; BEGIN; INSERT INTO orders (firstname, lastname, spots, order_id)
VALUES ('$firstname_value', '$lastname_value', $spots_value, '$unique'); INSERT INTO orders_info (order_id, ip, user_agent)
VALUES ('$unique', '$ip', 'browser'); COMMIT;";
if ($conn->query($sql) === TRUE) {
echo "Your order has been placed!" ."<br><br>". "Firstname: {$firstname_value}" ."<br>". "Lastname: {$lastname_value}" ."<br>". "Spots: {$spots_value}";
echo "<br><br>" . "ORDER #: {$unique}";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
答案 0 :(得分:0)
您不需要使用SET AUTOCOMMIT=0
禁用自动提交它会在您使用START TRANSACTION;
时自动禁用,并在使用COMMIT;
时恢复到原始状态在您的sql命令中它看起来像BEGIN;
一样引起了一个问题。
所以将所有sql语句放在start transaction和commit之间。
START TRANSACTION;
//your SQL statements
COMMIT;
答案 1 :(得分:0)
START TRANSACTION
和BEGIN
是同义词;不要做这两件事。START/BEGIN
会覆盖autocommit
;不要担心autocommit
。答案 2 :(得分:0)
在MySQL中,支持'BEGIN'和'BEGIN WORK'作为'START TRANSACTION'的别名。但是'START TRANSACTION'允许BEGIN没有的修饰符。
如果AUTOCOMMIT设置为1(默认值),则每个SQL语句(在事务内或不在事务中)都被视为完整事务,并在完成时默认提交。当AUTOCOMMIT设置为0时,通过发出SET AUTOCOMMIT = 0命令,后续的一系列语句就像一个事务,并且在发出显式COMMIT语句之前不会提交任何活动。
默认情况下,MySQL在启用AUTOCOMMIT的情况下运行。
使用START TRANSACTION隐式禁用自动提交。并且自动提交将被禁用,直到我们COMMIT或ROLLBACK。然后AUTOCOMMIT模式恢复到之前的状态。