PHP同时更新两个表

时间:2012-07-08 22:37:13

标签: php mysql

我有两个名为admin的表,另一个名为Permission。

  • 管理员表中包含具有以下信息的用户列表(id, 用户名,密码)
  • 权限表包含以下信息(user_id,permission_name, 用户)

当我编辑用户时,我会在同一页面上显示包括权限在内的所有信息。

当我点击编辑时,我可以更新信息,但因为如果一个表获得更新,我会收到错误消息,即使表已成功更新。

$sql = " UPDATE admin SET username='test', password='test' WHERE id=1;";
$result = mysql_query($sql, $connection);

if( mysql_affected_rows( $result ) == 1 )
{
   $sql = " UPDATE permission SET permission_name ='add_user', user='admin' WHERE user_id=1;";
   $result = mysql_query($sql, $connection);
   echo 'successfully';
}

else
{
   echo 'some error';
}

当我不想更改用户的权限时,它确实给了我错误,因为我没有改变任何东西。但如果我对管理表进行更改,一切正常。

如果成功更新了一个或两个消息,我如何显示成功消息。

4 个答案:

答案 0 :(得分:5)

您可以将两个表连接在一起以同时更新它们:

UPDATE admin a
INNER JOIN permission b ON a.id = b.user_id
SET
    a.username = 'test',
    a.password = 'test',
    b.permission_name = 'add_user',
    b.user = 'admin'
WHERE a.id = 1

答案 1 :(得分:0)

<?php

$success = true;

$sql = " UPDATE admin SET username='test', password='test' WHERE id=1;";
$result = mysql_query($sql, $connection);

if(!mysql_affected_rows( $result ))
   $success = false;

$sql = " UPDATE permission SET permission_name ='add_user', user='admin' WHERE user_id=1;";
$result = mysql_query($sql, $connection);

if(!mysql_affected_rows( $result ))
   $success = false;

echo ($success ? 'Success' : 'Error');

答案 2 :(得分:0)

在这种情况下,Zane Bien的答案是您的最佳选择,但是如果您不能只是将查询结合起来,则应检查(!$result)而不是(mysql_affected_rows($result) == 1),因为您正在尝试检查是否发生错误(这会导致mysql_query返回false),而不是表中是否实际更新了任何行。

答案 3 :(得分:0)

存储过程怎么样:

DELIMITER $$
CREATED PROCEDURE DoUpdate(TheID INT, TheUser VARCHAR(255), ThePassword VARCHAR(255), ThePermission VARCHAR(255), ThePermissionUser VARCHAR(255))
BEGIN

    UPDATE admin 
    SET username= TheUser
        , password= ThePassword
    WHERE id = TheID;

    IF ROW_COUNT() = 1 THEN
        UPDATE permission 
        SET permission_name = ThePermission
            , user = ThePermissionUser
        WHERE user_id = TheID;
    END IF;
END $$

然后:

CALL DoUpdate(1, 'test', 'test', 'add_user', 'admin');