我有一个名为users的数据库表,我已设法查看所有用户信息。我的下一步是删除一条记录。我发现很难做到,因为我使用的是物体。
我像这样调用我的用户列表:
echo $db->getUsers ();
我在init文件中实例化我的对象:
$db = new DB_con ();
在我的DB_con类中,我调用了函数getUsers
public function getUsers() {
$str = "SELECT * FROM users";
$result = $this->mysqli->query ( $str );
if ($result->num_rows > 0) {
$string = "<table><thead><tr><th>id</th><th>First name</th><th>Last name</th><th>Email</th><th>Role</th><th>Action</th></tr></thead><tbody>";
while ( $row = $result->fetch_assoc () ) {
$string .= "<tr><td>" . $row ['id'] . "</td><td>" . $row ['first_name'] . "</td><td>" . $row ['last_name'] . "</td><td>" . $row ['email'] . "</td><td>" . $row ['role_id'] . "</td><td> [<a href='delete.php?id=" . $row ['id'] . "'>Delete</a>]</td></tr>";
}
$string .= "</tbody></table>";
return $string;
}
}
正如您所看到的,我创建了一个看起来像这样的链接fx:delete.php?id = 13
在我的delete.php文件中,我有以下内容:
$id = intval($_GET['id']);
echo $id;
$sql = "DELETE FROM users WHERE id=$id";
$result = mysql_query($sql);
但我的用户并未被删除。我真的希望有人可以帮助我。请问,如果我需要为您提供更多代码。
答案 0 :(得分:1)
由于@MichaelBerkowski已经指出您将mysql_*
库与mysqli
混合在一起并不好,并且可能是您的问题所在,您没有使用已建立的连接mysql_*
图书馆。
您可以将以下函数添加到使用预准备语句的DB_con
类中,并且将默认保护您免受SQL注入:
public function deleteUser($id)
{
$sql = "DELETE FROM users WHERE id = ?";
if (!$result = $this->mysqli->prepare($sql))
{
return false;
}
if (!$result->bind_param('i', $id))
{
return false;
}
return $result->execute();
}
并将其称为$db->deleteUser($_GET['id']);
,无需使用intval
,因此您可以这样使用:
if ($db->deleteUser($_GET['id']))
{
echo "User has been deleted!";
}
else
{
echo "Could not delete the user!";
}
**仅适用于以上给定的功能!