如何在选择之前添加更新

how to add update before select

提问人:morbo 提问时间:11/16/2023 更新时间:11/16/2023 访问量:25

问:

如何更新之前已经登录过的用户的数据(他们的user_id被记录下来),然后再从本行完整列表中的数据库中获取这些用户$user = $this->pdo->prepare("SELECT * FROM bot_shop_profile WHERE user_id = :user_id"); $user->execute(['user_id' => $chat_id]);

    {
        $user = $this->pdo->prepare("SELECT * FROM bot_shop_profile WHERE user_id = :user_id");
        $user->execute(['user_id' => $chat_id]);
        if ($user->rowCount() == 0) {
            $newUser = $this->pdo->prepare("INSERT INTO bot_shop_profile SET user_id = :user_id, first_name = :first_name, last_name = :last_name, phone = :phone, adress = :adress, action = 'start', username = :username");
            $newUser->execute([
                'user_id' => $chat_id,
                'first_name' => $data['message']['chat']['first_name'],
                'last_name' => $data['message']['chat']['last_name'],
                'username' => $data['message']['chat']['username'],
                'phone' => '',
                'adress' => '',
            ]);
        } else {
            @$this->setActionUser("start", $chat_id);
        }
        
        
    }```

I think it should be an expression with UPDATE
php sql 电报

评论

0赞 Rob Eyre 11/16/2023
如果你稍微重新组织了一下你的代码 - 并且假设是一个唯一的键 - 你可以先做一个查询,然后再做你的user_idbot_shop_profileINSERT ... ON DUPLICATE KEY UPDATE ...SELECT
0赞 morbo 11/16/2023
我想更改“if”之前的部分(下面的所有内容都适合我),所以我需要立即更新所有字段,问题是我对 $user = $this->pdo->prepare 和 $user->execute 感到困惑

答:

1赞 Arman Saleem 11/16/2023 #1

可以使用 UPDATE 语句修改数据库中的现有记录。在这种情况下,如果具有指定user_id的用户已存在,则要更新用户的信息。下面介绍如何修改代码以实现此目的:

$user = $this->pdo->prepare("SELECT * FROM bot_shop_profile WHERE user_id = :user_id");
$user->execute(['user_id' => $chat_id]);

if ($user->rowCount() == 0) {
    // User doesn't exist, insert a new record
    $newUser = $this->pdo->prepare("INSERT INTO bot_shop_profile SET user_id = :user_id, first_name = :first_name, last_name = :last_name, phone = :phone, address = :address, action = 'start', username = :username");
    $newUser->execute([
        'user_id' => $chat_id,
        'first_name' => $data['message']['chat']['first_name'],
        'last_name' => $data['message']['chat']['last_name'],
        'username' => $data['message']['chat']['username'],
        'phone' => '',
        'address' => '',
    ]);
} else {
    // User exists, update the existing record
    $updateUser = $this->pdo->prepare("UPDATE bot_shop_profile SET first_name = :first_name, last_name = :last_name, username = :username WHERE user_id = :user_id");
    $updateUser->execute([
        'user_id' => $chat_id,
        'first_name' => $data['message']['chat']['first_name'],
        'last_name' => $data['message']['chat']['last_name'],
        'username' => $data['message']['chat']['username'],
    ]);

    $this->setActionUser("start", $chat_id);
}

此代码首先检查具有给定user_id的用户是否存在。如果没有,它将插入一条新记录。如果用户已存在,则会使用新信息更新现有记录。根据您的数据库架构调整 UPDATE 语句中的列名和值。

评论

0赞 morbo 11/16/2023
这正是我所需要的,非常感谢