php - 我的查询有问题吗?

标签 php mysql sql database

我正在处理一个包含 3 个表的数据库,其中一些表的信息重叠。用户可以通过我正在创建的网络应用程序更新每个表中的几列。但是……有一个问题。不确定它是什么,但我的更新没有发生。我想知道我的查询是否有问题。 (实际上,经过调试,我很确定是有的)。

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

关于php - 我的查询有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10888063/

相关文章:

sql - Oracle:在一个函数中返回多个值

php - 使用 Swiftmailer 从 gmail 发送电子邮件

php - 使用 Livewire 仅选中一个复选框并取消选中其他复选框

php - 在同一个PHP网站中引用不同的MySQL查询

mysql - 选择给出具有两个或两个以上非零值的行的查询

mysql - 由于选择查询而锁定表?

php - 通过输入类型文件更新 blob 文件

php - 我如何强制 PHP 使用 iconv 的 libiconv 版本而不是 CentOS 安装的 glibc 版本?

sql - 正确使用 HAVING 与 group by 和 COUNT

MySQL:SELECT 只获取基于 "WHERE x LIKE ' % 的记录?多对多关系中的 %'"