数据库中的所有内容都会更新而不是单行

问题描述 投票:-1回答:4

我正在构建登录系统,我已添加更新功能。但是当我从登录帐户更新用户配置文件时,整个数据库行都会更新。

我有这个代码

    include 'db.php';
session_start();
session_regenerate_id();
if (!$_SESSION['logged_in'] == true) {
    $_SESSION['message'] = "You must be logged in to use this section";
    header("location: error.php");
}
if (isset($_POST['uupdate'])) {
    $username = $_POST['uusername'];
    $email = $_POST['uemail'];
    if (isset($_POST['uusername'])) {
        try {


$query = $connect->prepare("UPDATE users SET username='$username' WHERE id = '$id'");
        $check = $query->fetch();
    $id = $check['id'];
        $query->execute(array($username));
    } catch (PDOException $e) {
        echo $e->getMessage();
    }
        if (isset($_POST['uemail'])) {
        try {
        $query = $connect->prepare("UPDATE users SET email='$email' LIMIT 1");
        $query->execute(array($email));
    } catch (PDOException $e) {
        echo $e->getMessage();
    }
}
}

我不知道如何使用id更新用户。如果有人有解决方案,请分享。

php mysql database
4个回答
2
投票

当然,您缺少where条件,因此所有条目都会更新。您必须明确告知要更新哪一行。

用户名和电子邮件可能都是唯一的,所以,让我们说$old_email$old_username是您要更新的用户的旧值,那么您应该将查询更改为:

UPDATE users SET username='$username' WHERE username ='$old_username'

UPDATE users SET email='$email' WHERE email ='$old_email'

分别。

参考条件in the official documentation


1
投票
$connect->prepare("UPDATE users SET username='$username' LIMIT 1");

缺少WHERE子句。你需要添加WHERE id =“$ id”,你必须从某个地方获得$ id,也许是$ _SOSTIOn $ _POST,但是这部分架构在这里看不到。


1
投票

您需要指定要更新的表的哪一行。你可以使用WHERE子句这样做。您通常会在id子句中使用用户的WHERE

例:

要将用户名为Bob的用户的电子邮件地址更改为[email protected],您可以使用以下查询:

UPDATE users SET email='[email protected]' WHERE username='Bob'


0
投票

您必须定义要更新的行:

您可以使用ID:

$query = $connect->prepare("UPDATE users SET email='$email' WHERE id='{$id}' LIMIT 1");

或使用用户名:

$query = $connect->prepare("UPDATE users SET email='$email' WHERE username='{$username}' LIMIT 1");

您还使用了错误的准备/执行功能。要将参数安全地绑定到查询,您可以这样做:

$query = $connect->prepare("UPDATE users SET email=:email WHERE id=:id LIMIT 1");
$query->execute(array('id'=>$id, 'email'=>$email));

PHP 7>在PHP 7或更高版本中,您可以将array()更改为[],如下所示:

$query->execute(['id'=>$id, 'email'=>$email]);
© www.soinside.com 2019 - 2024. All rights reserved.