0

adminと呼ばれるテーブルとPermissionと呼ばれるテーブルが2つあります。

  • 管理者テーブルには、次の情報(ID、ユーザー名、パスワード)を含むユーザーのリストがあります
  • 権限テーブルには次の情報があります(user_id、permission_name、user)

ユーザーを編集すると、権限を含むすべての情報が同じページに表示されます。

[編集]をクリックすると情報を更新できますが、1つのテーブルが更新されると、テーブルが正常に更新されていてもエラーメッセージが表示されるためです。

$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';
}

ユーザーの権限を変更したくない場合は、何も変更していないため、エラーが発生します。しかし、adminテーブルに変更を加えると、すべて正常に機能します。

一方または両方が正常に更新された場合、成功したメッセージを表示するにはどうすればよいですか。

4

4 に答える 4

5

2つのテーブルを結合して、同時に更新できます。

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
于 2012-07-08T22:44:40.577 に答える
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');
于 2012-07-08T22:45:05.290 に答える
0

この場合、Zane Bien の回答が最適なオプションですが、エラーが発生したかどうかを確認しようとしているため (mysql_query が false を返す原因となります)、クエリを単に組み合わせることができない場合は、(!$result)代わりに確認する必要があります。 (mysql_affected_rows($result) == 1))、テーブルで実際に行が更新されたかどうかではありません。

于 2012-07-08T22:53:13.783 に答える
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');
于 2012-07-08T23:16:13.480 に答える