PHP中的事务不起作用

时间:2013-12-06 12:22:09

标签: php mysql transactions

我有两个表,OrderDish,我需要创建一个事务,以确保菜肴将同时按顺序插入。我如何在这里申请交易?

我做到了这一点:

foreach($options as $name)
{
        $nomeA = $name;
        $sql = "INSERT INTO Order VALUES ('$email',$nEnc,'$nomeA');";
        echo("<p>$sql</p>");
};
$tot_sql = "start transaction;".$sql."rollback;";
$db->query($tot_sql);

但我认为它不会起作用,因为$sql会更改并覆盖之前的查询。

3 个答案:

答案 0 :(得分:1)

使用.=附加到字符串:

$sql = '';

foreach ($options as $name) {
    $sql1 = "INSERT INTO Order VALUES ('$email', $nEnc, '$name');";
    echo "<p>$sql1</p>";
    $sql .= $sql1;
}

$tot_sql = "start transaction;".$sql."rollback;";
$db->query($tot_sql);

您还可以在包含多个VALUES列表的单个语句中执行所有插入操作。

$values = array();
foreach($options as $name) {
    $values[] = "('$email', $nEnc, '$name')";
}
if (count($values)) {
    $values_string = implode(',', $values);
    $sql = "start transaction;INSERT INTO Order VALUES $values_string;rollback;";
    $db->query($sql);
}

答案 1 :(得分:0)

使用

$sql='';
foreach($options as $name)
{
        $nomeA = $name;
        $sql .= "INSERT INTO Order VALUES ('$email',$nEnc,'$nomeA');";
        echo("<p>$sql</p>");

};
$tot_sql = "start transaction;".$sql."rollback;";
$db->query($tot_sql);

答案 2 :(得分:0)

Order也是保留字,使用反引号

`order`