我正在处理一个包含 3 个表的数据库,其中一些具有重叠的信息。用户可以通过我正在创建的 Web 应用程序更新每个表中的几列。但。。。有一个问题。不确定它是什么,但我的更新没有发生。我想知道我的查询是否有问题。(实际上,调试后,我很确定有)。
if (empty($errors)) {
$query1 = "UPDATE owner SET
name = '{$name}'
WHERE ownerId= '{$ownerId}'";
$query1_result = mysql_query($query1);
if (mysql_affected_rows()==1) {
$query2 = "UPDATE queue_acl SET
date_expires = '{$date_expires}'
WHERE user_id='{$ownerId}'";
$query2_result = mysql_query($query2);
if (mysql_affected_rows()==2) {
$query3 = "UPDATE ownerOrganization SET
orgId = {$orgId}
WHERE ownerId = '{$ownerId}'";
$query3_result = mysql_query($query3);
if (mysql_affected_rows()==3) {
$_SESSION['name'] = $name;
$_SESSION['updates_occurred'] = true;
}
}
}
对不起,如果它是微不足道的;我以前从未使用过多个表。
按照你的方式更新表格不是一个好习惯。如果更新以某种方式相关,您可能需要考虑创建事务。事务确保执行所有更新(如果没有,则执行回滚(这意味着不会执行任何更新)):
// disable autocommit
mysqli_autocommit($dblink, FALSE);
// queries
$query1 = mysqli_query($dblink, "UPDATE owner SET name = '{$name}' WHERE ownerId= {$ownerId}'");
$query2 = mysqli_query($dblink, "UPDATE queue_acl SET date_expires = '{$date_expires}' WHERE user_id='{$ownerId}'");
$query3 = mysqli_query($dblink, "UPDATE ownerOrganization SET orgId = {$orgId} WHERE ownerId = '{$ownerId}'");
if($query1 && $query2 && $query3)
{
mysqli_commit($dblink);
$_SESSION['name'] = $name;
$_SESSION['updates_occurred'] = true;
}
else
mysqli_rollback($dblink);
我还没有测试过它,但它猜测它应该可以工作。此外,您应该查看mysqli或预处理语句,因为mysql_已被弃用。
第一个问题可能与范围有关。你的条件是错误的?
If (result ==1)
{
if(result == 2)
{
...
}
}
因此,如果您的第一个结果大于 1,则将跳过所有内部条件。
如果我理解的话应该是:
if(result ==1)
{
}
elseif(result ==2)
{
}
...(other conditions)...
else
{
}
如果您的结果比预期的要多,我会建议您使用基本情况来捕获。
第二个问题可能是您在除 orgId = {$orgId} 之外的所有数据周围引用。这可能应该是 orgId = '{$orgId}' 如果 id 是一些随机字符串,那么不引用会导致问题。
最后一个问题是检查所有者 ID。如果由于某种原因为空,那么您的查询将失败,因为 id=0(假设您打开了自动增量)永远不会为真。放置一个 if(!empty(ownerId) 条件。