我有两个表,Order
和Dish
,我需要创建一个事务,以确保菜肴将同时按顺序插入。我如何在这里申请交易?
我做到了这一点:
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
会更改并覆盖之前的查询。
答案 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`