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

时间:2018-09-04 08:47:38

标签: php mysql database

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

我有这个代码

    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更新用户。如果有人有解决方案,请分享。

4 个答案:

答案 0 :(得分:2)

当然,您缺少t=1929 [st= 0] URL_REQUEST_DELEGATE [dt=0] t=1929 [st= 0] +URL_REQUEST_START_JOB [dt=1058] --> load_flags = 16384 (MAYBE_USER_GESTURE) --> method = "GET" --> url = "https://.../layout.css" t=1929 [st= 0] URL_REQUEST_DELEGATE [dt=0] t=1929 [st= 0] HTTP_CACHE_GET_BACKEND [dt=0] t=1930 [st= 1] HTTP_CACHE_OPEN_ENTRY [dt=1] --> net_error = -2 (ERR_FAILED) 条件,因此所有条目都会更新。 您必须明确告知要更新的行。

用户名和电子邮件可能都是唯一的,因此,假设where$old_email是您要更新的用户的旧值,那么您应该将查询更改为:

$old_username

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

分别。

where条件in the official documentation的引用

答案 1 :(得分:1)

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

缺少WHERE子句。您需要添加WHERE id =“ $ id”,并且必须从某处获取$ id,也许是$ _POST的$ _SESSIOn,但此处看不到体系结构的那一部分。

答案 2 :(得分:1)

您需要指定要更新表的哪一行。您可以使用WHERE子句来实现。通常,您会在id子句中使用用户的WHERE

示例:

要将用户名Bob的用户的电子邮件地址更改为newemail@mail.com,可以使用以下查询:

UPDATE users SET email='newemail@mail.com' WHERE username='Bob'

答案 3 :(得分: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]);