2

我正在开发一个包含 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;
            }
        }
    }

对不起,如果它是微不足道的;我以前从未使用过多个表。

4

2 回答 2

1

以您的方式更新表格不是一个好习惯。如果更新以某种方式相关,您可能需要考虑创建事务。事务确保执行所有更新(如果没有,则完成回滚(这意味着不会执行更新)):

// 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_ 已弃用。

于 2012-06-04T20:59:24.137 回答
0

第一个问题可能与范围有关。你的 if 条件错误?

If (result ==1)
{
  if(result == 2)
  { 
   ...
  }
}

因此,如果您的第一个结果大于 1,则将跳过所有内部条件。

如果我理解它应该是:

if(result ==1)
{
}
elseif(result ==2)
{
}
...(other conditions)...
else
{ 
}

如果您的结果超出预期,我会推荐一个基本案例来捕捉。

第二个问题可能是您引用了除 orgId = {$orgId} 之外的所有数据。这可能应该是 orgId = '{$orgId}' 如果 id 是一些随机字符串,那么不引用会导致问题。

最后一个问题是检查 ownerId。如果由于某种原因它是空白的,那么您的查询将失败,因为 id=0 (假设您启用了自动增量)永远不会是真的。放置一个 if(!empty(ownerId) 条件。

于 2012-06-04T21:25:15.493 回答