首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MYSQL中循环数组和执行语句

在MYSQL中循环数组和执行语句
EN

Stack Overflow用户
提问于 2018-03-16 04:23:48
回答 3查看 236关注 0票数 0

是否可以在mysql中循环此数组并执行delete语句,其中category_id列等于下面该数组中循环的当前值。

代码语言:javascript
复制
      $row =   [
            'type' => '3',
            'name'  => 'Warez',
            'category_id' => 'IAB26-2',
            'parent_category_id' => 'IAB26'
        ],
        [
            'type' => '3',
            'name'  => 'Spyware/Malware',
            'category_id' => 'IAB26-3',
            'parent_category_id' => 'IAB26'
        ],
        [
            'type' => '3',
            'name'  => 'Copyright Infringement',
            'category_id' => 'IAB26-4',
            'parent_category_id' => 'IAB26'
        ],
        [
            'type' => '3',
            'name'  => 'Uncategorized',
            'category_id' => 'IAB24'
        ]

我已经试过了

代码语言:javascript
复制
 foreach($row as $value) {
       $this->execute('DELETE from categories WHERE category_id = '.$value['category_id'].'');
    }

似乎并不像它应该的那样工作。对于这种操作,有没有更好的Sql命令?

EN

回答 3

Stack Overflow用户

发布于 2018-03-16 20:10:42

您的代码是不安全的,因为可能会注入SQL。所以攻击者可以在您的SQL查询中执行他想要的任何东西。

如果这真的是CakePHP代码,你为什么不使用?您应该阅读https://book.cakephp.org/3.0/en/orm.html表对象和删除数据一节。如果不是,不要使用错误的标签。

假设这是在一个表对象中完成的,最简单的方法是:

代码语言:javascript
复制
$ids = Hash::extract($data, '{n}.category_id');
if (!empty($ids)) {
    $this->deleteAll([
        'category_id IN' => $ids
    ]);
}
票数 1
EN

Stack Overflow用户

发布于 2018-03-16 04:35:35

您可能只需要将连接的值用引号括起来(因为它不是数字)。

如下所示:

代码语言:javascript
复制
$this->execute('DELETE from categories WHERE category_id = "'.$value['category_id'].'"');

但是,按照其中一条评论中的建议执行DELETE ... WHERE会产生更好的性能。

另外,请注意,如果数据来自用户,那么它可能容易受到SQL注入的影响,因此您应该阅读并使用参数化查询,而不是连接。

票数 0
EN

Stack Overflow用户

发布于 2018-03-16 07:34:48

使用IN子句

代码语言:javascript
复制
$list = array(); foreach ($row as $item) {
    $list[] = "'{$item['category_id']}'";
}
$sql = 'DELETE from categories WHERE category_id IN ('.implode(',',$list).')';
$this->execute( $sql );
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49308551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档