【问题标题】:PHP While Statement Delete only one row from table Mysql PDOPHP While 语句从表 Mysql PDO 中只删除一行
【发布时间】:2019-01-11 02:06:35
【问题描述】:

如果有人单击删除按钮,我有一个 while 语句和一个 PDO 语句来删除一行。

$companies = $db->query("SELECT * FROM companies LIMIT 50");
while($result = $companies->fetch()) {
                $delete = $db->prepare("DELETE from companies WHERE id=?");
                $response = $delete->execute(array($result['id']));           
   }
}

例如:

公司 1 删除

公司 2 删除

如果有人单击该删除按钮,我想删除它所属的公司。现在,当我执行此代码并仅针对一家公司单击删除时,它会删除表中的所有公司。

【问题讨论】:

  • 如果没有看到生成$companies 结果集的查询,就不可能回答您的问题。
  • 在 while 循环中使用 delete 效率很低,考虑使用 where id in() 以获得更好的性能。
  • delete 周围加上一个条件可能吗?应该删除的记录如何确定?

标签: php mysql pdo


【解决方案1】:

您的代码处于循环中间,并在它找到的每条记录上调用DELETE。毫不奇怪,它会删除所有公司。

通常你所做的只是删除一个并且只删除一个:

$delete = $db->prepare("DELETE from companies WHERE id=?");
$response = $delete->execute(array($_POST['id']));        

其中$_POST['id'] 表示已发布的id 参数。使用 POST 的原因是因为某些浏览器会尝试提供帮助并预先获取任何 GET 链接。这意味着他们会帮助删除所有内容。

约定是使用 POST,因为浏览器不会自动触发。

像 jQuery 这样的工具可以很容易地使用$.post 等发布链接。例如:

<a href="/delete" data-id="3" data-method="post" class="btn btn-primary">Delete</a>

然后您可以使用以下方式自动绑定到所有这些“发布”按钮:

$(function() {
  // Augment all postable links with a click handler
  $('a[data-method="post"]').click(function() {
    $.post($(this).attr('href'), {
      id: $(this).attr('data-id')
    });

    return false;
  });
});

如果使用不显眼的 JavaScript 原则,您可以相当无缝地添加它。

【讨论】:

    【解决方案2】:

    不需要while循环,只需传递单个公司ID并通过ajax或链接或表单发布方法删除

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      相关资源
      最近更新 更多