如何删除所选用户? PDO

时间:2016-08-28 07:03:11

标签: php mysql pdo delete-row

我正在使用PDO,我想从我的成员列表中删除指定的用户。我做了#34;删除"按钮显示在每个用户身上,我希望当我点击任何随机用户时,删除他。这是我第二天试图做到这一点。

我做了这样的事情:

$id = $user->id;
$sql = "DELETE FROM `users` WHERE `id` = :id";
$query = $handler->prepare($sql);
$query->execute(array(":id" => $id));

但这不是一个解决方案,这将删除每个人加入该页面的原因。我想点击"删除"按钮,删除该按钮所在的用户。我希望你理解我,我会告诉你我想要它的画面。

enter image description here

2 个答案:

答案 0 :(得分:1)

您应该使用$_POST全局数组获取要删除的用户ID($_REQUEST会起作用,但可能会让您面临更大的XSS攻击风险 - 这是因为它也接受GET变量,可以来自你的形式之外)。

我会弄清楚你哪里出错了。

基于您放置的HTML进行用户ID检索。

// This user id can be obtained in two ways as I suggested.
// 1.) $_REQUEST['user_id'] if you pass the data in the href link
// 2.) $_POST['user_id'] if you pass the data as hidden field in form element.
// 3.) Ensure that you get your USER ID correct  in that place by echoing the query that you have made in the SQL.
    profile.php
<a href="process.php?delete_id=<?php echo $data->id; ?>">DELETE</a>

process.php

<?php
// Ensure DB connectivity in this page. And this code will work fine.
if(isset($_REQUEST['delete_id'])){
    $id = $_REQUEST['delete_id'];
    $sql = "DELETE FROM `users` WHERE `id` = :id";
    $query = $handler->prepare($sql);
    $query->execute(array(":id" => $id));
}
?>

答案 1 :(得分:-1)

您的代码存在的一个问题是,您实际上并未将数据绑定到查询中。如果您打算使用PDO,请使用准备好的声明。

我创建了一个基于WHERE删除行的函数。

<?php

function pdo_delete($MyConnection, $Table, $Where, $bindArray = array(), $Limit = 1) {
    $prep = $MyConnection->prepare("DELETE FROM $Table WHERE $Where LIMIT $Limit");
    foreach ($bindArray as $key => $value) {
        $prep->bindValue(":$key", $value);
    }
    $prep->execute();
    $prep->closeCursor();
}

?>
  

$ MyConnection存储pdo连接实例

     

$ Table存储您要定位的表的名称

     

$ Where存储您要定位的列的名称

     

$ bindArray将数据绑定到列并选择与

匹配的行      

$ Limit是您要允许的行数

以下是如何使用此功能的示例。

  • 调用函数

    pdo_delete();
    
  • 调用您的PDO连接

    pdo_delete(null); // Replace null with your own pdo connection, in your case $handle
    
  • 定位表格

    pdo_delete(null, 'users');
    
  • 您想在哪里绑定数据

    pdo_delete(null, 'users', 'id = :id');
    
  • 绑定数据

    pdo_delete(null, 'users', 'id = :id', array('id' => $user->id));
    
  • 如果需要,请添加限制...如果是,请添加另一个逗号并键入要允许的行数。

    pdo_delete(null, 'users', 'id = :id', array('id' => $user->id), 2); // Allows 2 columns
    

您可以更改vars / function_name / etc的名称。

这应该有效,我将它用于我的网站。