如何从数据库中删除特定用户?
How To Delete a Specific User from Database?
假设我有一个用户在我的网站上注册,他们现在想删除该帐户。
我有一个查询要执行此操作,但每次用户使用此功能时代码都会删除所有用户。
这是我的代码:
<?php
// starts session
session_start();
// set values
$DB_SERVER = 'localhost';
$DB_USERNAME = 'root';
$DB_PASSWORD = '';
$DB_NAME = 'acoolname';
// creates a new connection to the database
$conn = new mysqli($DB_SERVER, $DB_USERNAME, $DB_PASSWORD, $DB_NAME);
// checks connection
if ($conn->connect_error) {
die("ERRO: Falha ao conectar. " . $conn->connect_error);
}
// query to delete the user
$sql = "DELETE FROM users WHERE id = id";
// logout user
if ($conn->query($sql) === true) {
header("location: logout.php");
}else {
echo "ERRO: Falha ao conectar. " . $conn->error;
}
// close connection
$conn->close();
?>
您的 WHERE
条件针对每一行比较当前行的 id
是否与 id
匹配。换句话说,查询将字段与自身进行比较,从而为每一行生成 true
。因此每一行都会被删除。
您必须将第二个 id
替换为包含当前用户的 id-value 的变量,或者替换为当前用户的 ID。后者容易受到 SQL 注入。请参阅 this question 如何安全地将参数插入查询。
id = id
始终 returns 为真,因此查询确实删除了所有用户。
删除特定用户的安全方法是使用准备好的语句,以避免SQL注入。
类似
$stmt = $conn->prepare('DELETE FROM users WHERE id = ?');
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->close();
假设我有一个用户在我的网站上注册,他们现在想删除该帐户。
我有一个查询要执行此操作,但每次用户使用此功能时代码都会删除所有用户。
这是我的代码:
<?php
// starts session
session_start();
// set values
$DB_SERVER = 'localhost';
$DB_USERNAME = 'root';
$DB_PASSWORD = '';
$DB_NAME = 'acoolname';
// creates a new connection to the database
$conn = new mysqli($DB_SERVER, $DB_USERNAME, $DB_PASSWORD, $DB_NAME);
// checks connection
if ($conn->connect_error) {
die("ERRO: Falha ao conectar. " . $conn->connect_error);
}
// query to delete the user
$sql = "DELETE FROM users WHERE id = id";
// logout user
if ($conn->query($sql) === true) {
header("location: logout.php");
}else {
echo "ERRO: Falha ao conectar. " . $conn->error;
}
// close connection
$conn->close();
?>
您的 WHERE
条件针对每一行比较当前行的 id
是否与 id
匹配。换句话说,查询将字段与自身进行比较,从而为每一行生成 true
。因此每一行都会被删除。
您必须将第二个 id
替换为包含当前用户的 id-value 的变量,或者替换为当前用户的 ID。后者容易受到 SQL 注入。请参阅 this question 如何安全地将参数插入查询。
id = id
始终 returns 为真,因此查询确实删除了所有用户。
删除特定用户的安全方法是使用准备好的语句,以避免SQL注入。
类似
$stmt = $conn->prepare('DELETE FROM users WHERE id = ?');
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->close();