ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

php-有效删除多个表中的数据mySQLi Prepared Statement

2019-11-08 07:28:50  阅读:159  来源: 互联网

标签:mysqli prepared-statement php


这个问题已经在这里有了答案:            >            How to delete from multiple tables in MySQL?                                    6个
我正在从多个表中的dB中删除数据.我正在使用模式确认(删除)的方式将数据用户名发送到delete-member.php:

<script>
    $('.delete-button').on('click', function (e) {
    var username = $(this).attr('data-id');
     $('.confirm-delete').attr('data-id',username);

    });
    $(".confirm-delete").on('click', function (e) {
        var username = $(this).attr('data-id');
        console.log(username);

        //Ajax for deleting category
        $.ajax({
            url: 'handlers/delete_member.php',
            type: 'GET',
            data: {username: username},
            error: function() {
                alert('Something went wrong');
            },
            success: function(data) {
                console.log("Member Deleted");
            }
        });
        location.href="site_members.php?username="+username;
    });
</script>

在这里一切正常,我$_GET用户名并删除数据.我面临的挑战是该特定用户使用该系统已有一段时间了.为了对该用户进行硬删除,我需要执行mk.确保在多个表中删除了用户名.确切地说是15.

使用准备好的语句,我着手删除每次出现的内容,如下所示:

if(isset($_GET["username"])) {
$userFromURL = $_GET["username"];

//delete member information from users
global $con;
$delete_mbrQ = mysqli_prepare($con, "DELETE FROM users WHERE username=?");
$delete_mbrQ->bind_param("s", $userFromURL);
$delete_mbrQ->execute();
$delete_mbrQ->close();

//delete member posts
$delete_postsQ = mysqli_prepare($con, "DELETE FROM posts WHERE added_by=?");
$delete_postsQ->bind_param("s", $userFromURL);
$delete_postsQ->execute();
$delete_postsQ->close();

//delete messages
$del_msgsQ = mysqli_prepare($con, "DELETE FROM messages WHERE user_to=? OR user_from=?");
$del_msgsQ->bind_param("ss", $userFromURL, $userFromURL);
$del_msgsQ->execute();
$del_msgsQ->close();

等等…(我不会全部放15张,但是您会领会到这一点)我对出现用户名且工作正常的所有15张桌子都这样做了.但是,看看这大段重复代码,我想知道是否有更有效的方法来做到这一点?我可以将其合并为一个或两个语句来实现相同的目的吗?

我一直在对此进行研究,但是我读过的大多数书都更多地讨论了设置外键的问题,在某些情况下我已经做了,但显然并非如此.对于预准备语句和列名不同的实例,我也找不到很多.任何帮助,示例,链接等,将不胜感激.

解决方法:

您可以使用MySQL联接;内部联接(或左联接)

使用上面的示例,您可以构造单个SQL查询,该查询使用联接查询将各种表组合在一起,并删除这些联接中的所有结果.

DELETE users, posts, messages FROM users 
       INNER JOIN posts 
             ON posts.added_by = users.username
       INNER JOIN messages 
             ON messages.user_to = users.username OR messages.user_from = users.username
WHERE users.username= ?

这应该可以满足您的需要,但是对于15个表,如果索引设置不正确,则很容易变得更加混乱,并且可能会更慢.

资料来源:

> http://www.mysqltutorial.org/mysql-delete-join/
> How to delete from multiple tables in MySQL?

也…

为了保持MySQL的效率,您可以简单地将PHP预处理语句包装成一个循环并针对每个表运行该循环,具体取决于表的设置方式,这似乎很容易,但仅在大多数情况下如此.某些重复可能仍然存在.

…在新表中使用外键delete_table,该表引用了所有其他(15)个表中该行的出现,然后只需从delete_table中删除并观察删除级联!

标签:mysqli,prepared-statement,php
来源: https://codeday.me/bug/20191108/2006638.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有