javascript - 如何使用 PHP 中的 ID 数组从 mysql 表中删除多行

标签 javascript php mysql angularjs arrays

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

编辑:一个更好的解释 - 我的 php 根本不起作用。在检查了评论中塞巴斯蒂安提供的链接后,我对其进行了一些编辑

注意:我使用 AngularJS 来发布

这是我的 $data 结构,来 self 的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);

最佳答案

这是 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);

关于javascript - 如何使用 PHP 中的 ID 数组从 mysql 表中删除多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43177602/

相关文章:

javascript - 动态改变HTML元素的ID属性

javascript - 使用 URL 过滤 JQuery 列表

javascript - react 面包屑

PHP 三元运算符多语句

php - PHP 中的对象复制与克隆

mysql - 如何在 CodeShip Basic 的测试管道中为 Laravel 应用程序运行自定义 mysql 脚本?

mysql - 我如何找到必须具有 N > 1 关联的行作为避免 N+1 查询的条件

java - 方法调用两次 GWT

javascript - 最佳服务器 API 和客户端 Javascript 交互方法?

java - 从 Java 插入 MySQL 时 CPU 使用率较高