Mysql SQL更新两个表事务语法
一次更新两个表的语法有问题。我的代码当前如下所示:Mysql SQL更新两个表事务语法,mysql,sql,Mysql,Sql,一次更新两个表的语法有问题。我的代码当前如下所示: if ($stmt = $mysqli->prepare(' BEGIN TRANSACTION UPDATE items_woods SET items_woods.oak = ´1´ FROM items_woods T1, skills_woodcutting T2 WHERE T1.id = T2.id
if ($stmt = $mysqli->prepare('
BEGIN TRANSACTION
UPDATE items_woods
SET items_woods.oak = ´1´
FROM items_woods T1, skills_woodcutting T2
WHERE T1.id = T2.id
and T1.id = ´?´
UPDATE skills_woodcutting
SET skills_woodcutting.exp = ´1´
FROM items_woods T1, skills_woodcutting T2
WHERE T1.id = T2.id
and T1.id = ´?´
COMMIT
')) {
/* Bind parametres */
$stmt->bind_param('i', $id);
/* Insert the parameter values */
$id = 1;
/* Execute the query */
$stmt->execute();
/* Close statement */
$stmt->close();
} else {
/* Something went wrong */
echo 'Something went terrible wrong' . $mysqli->error;
}
我正在运行一个MySQL服务器,我看不出问题出在哪里,如果有人能提示我正确的语法,我将不胜感激。谢谢
我尝试过以下这篇文章: 上述文章在您的案例中是一个不好的信息来源,因为它是针对SQL Server而不是MySQL的 SQL Server和MySQL对于更新有不同的语法:
- SQL Server不允许同时更新多个表,而MySQL则允许。因此,您不需要两次更新李>
- 在MySQL中,在SQL Server中,SET子句位于所有表引用之后,而在SQL Server中,SET子句位于FROM子句之前
- 在MySQL中,
中没有UPDATE
子句FROM
更新物品\u woods t1加入技能\u Woodcuting t2
在t1.id=t2.id上
设置t1.oak=1,
t2.exp=1
其中t1.id=?;
这里是演示
您的php代码可以归结为
$id = 1;
$sql = 'UPDATE items_woods t1 JOIN skills_woodcutting t2
ON t1.id = t2.id
SET t1.oak = 1,
t2.exp = 1
WHERE t1.id = ?';
if ($stmt = $db->prepare($sql)) {
$stmt->bind_param('i', $id);
$stmt->execute();
$stmt->close();
} else {
die('Error: ' . $db->error); //TODO:better error handling
}
现在,除了SQL Server和MySQL在更新语法上的差异之外,如果出于某种原因,您需要发出多个UPDATE语句,那么您的代码还存在其他问题:
prepare()
和execute()
同时准备和执行多个SQL语句;您可以逐个准备并执行它们,也可以使用mysqli\u multi\u query()
,则必须以分号终止每个SQL语句代码>
要包括您的错误消息吗?(但是试着使用类似于
从skills\u woodcutting更新items\u woods SET oak='1',其中items\u woodcutting.id=skills\u woodcutting.id和items\u woods.id='?“
)在执行时唯一发生的事情是底部的错误“出了严重的错误”。嗯,在我看来,我的语法应该是正确的,但是肯定有一些不正确的东西,我也可以在查询中看到两个参数,并且只有一个参数绑定。我尝试了以下帖子:这是一个非常好的答案,非常感谢,我将在一个小时内尝试。干杯