【问题标题】:How to remove multiple rows from mysql table, using an array of IDs in PHP如何使用PHP中的ID数组从mysql表中删除多行
【发布时间】:2017-08-27 21:42:58
【问题描述】:

我在使用数组进行 sql 查询一次删除多行数据时遇到问题。请忽略我现在正在使用sql注入。

编辑:更好的解释 - 我的 php 根本不起作用。在检查了 cmets 中提供的 Sebastian 链接之后,我对其进行了一些编辑

注意:我正在使用 AngularJS 发帖

这是我的 $data 结构,来自我的 controller.js 函数。 devicesToDelete 只是一个简单的数组,例如[“1”,“2”,“3”]:

$http.post('./js/removeMultiple.php', { 'devicesToDeleteArray': devicesToDelete })
     .success(function(data) {
          $scope.results = data;
          devicesToDelete = [];
     })
     .error(function(err) {
         $log.error(err);
     })

这是更新后的 php 代码,我遇到了问题。单击我的 deleteMultiple 按钮时,只会触发确认警报,不会删除所选项目,并且控制台不会出现错误:

<?php

$data = json_decode(file_get_contents("php://input"));

include('config.php');

$sql = "DELETE FROM devices WHERE devID in ( implode(",", $data) )";

$qry = $conn->query($sql);

$sql = "SELECT * FROM devices";

$qry = $conn->query($sql);

$data = array();

if($qry->num_rows > 0){
    while($row = $qry->fetch_object()){
        $data[] = $row;
    }
}else {
    $data[] = null;
}




$conn->close();

echo json_encode($data);

编辑 2:我设法自己解决了这个问题。这是解决方案:

我在 javascript 端的数组上使用了 .join() 来让所有要删除的 ID 用逗号分隔(例如 1、2、3):

$http.post('./js/removeMultiple.php', { 'devicesToDeleteArray': devicesToDelete.join(", ") })
                    .success(function(data) {
                        $scope.results = data;
                        devicesToDelete = [];
                    })
                    .error(function(err) {
                        $log.error(err);
                    })

然后我刚刚在我的 php 代码中添加了我完全浏览过的内容,这是我传递给它的数组的名称 - devicesToDeleteArray

<?php

$data = json_decode(file_get_contents("php://input"));

include('config.php');

$sql = "DELETE FROM devices WHERE devID in ($data->devicesToDeleteArray)";

$qry = $conn->query($sql);

$sql = "SELECT * FROM devices";

$qry = $conn->query($sql);

$data = array();

if($qry->num_rows > 0){
    while($row = $qry->fetch_object()){
        $data[] = $row;
    }
}else {
    $data[] = null;
}

$conn->close();

echo json_encode($data);

【问题讨论】:

  • 您应该不惜一切代价避免 SQL 循环。要解决您的 WHERE IN 问题,请查看此处:[stackoverflow.com/questions/2373562/pdo-with-where-in-queries]
  • 你有什么问题?你应该使用.then 而不是successerror
  • 如果这是你的工作职能......你真正的问题是什么......? .. 没有结果 ?结果错误? ..解释得更好..
  • $data 默认是一个对象。澄清$data 结构。
  • 无法理解str_repeat 那里。 $data = array_map('intval', $data); $ids = implode(',', $data);

标签: javascript php mysql angularjs arrays


【解决方案1】:

这里是php代码:

<?php
$ids = $_POST['devicesToDeleteArray'];
if(!is_array($data)) {
   $ids = json_decode($data, true);
}
if(!empty($ids)) {
include 'config.php';

$sql  = "DELETE FROM devices WHERE devID in (implode(",", $ids))";
$qry  = $conn->query($sql);
$sql  = "SELECT * FROM devices";
$qry  = $conn->query($sql);
$data = array();
if ($qry->num_rows > 0) {
    while ($row = $qry->fetch_object()) {
        $data[] = $row;
    }
} else {
    $data[] = null;
}
$conn->close();
echo json_encode($data);

【讨论】:

    猜你喜欢
    • 2013-03-08
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多