编写PDO DELETE查询值

问题描述 投票:0回答:3

我想知道我们是否仍然可以使用来自新鲜的DELETE行的值作为SELECT或者我们真的需要之前使用SELECT吗?

示例: 改变这一点

$foo = $db->prepare("SELECT * FROM table WHERE id= :id");
$foo->execute(array(
    "id" => $table_id
));
$foo = $foo->fetch(PDO::FETCH_ASSOC);

$delete_foo = $bdd->prepare("DELETE FROM table WHERE id = :id");
$delete_foo->execute(array(
    "id" => $table_id
));
echo $foo['name'] . " has been deleted !";

进入:

$delete_foo = $bdd->prepare("DELETE FROM table WHERE id = :id");
$delete_foo->execute(array(
    "id" => $table_id
));
$delete_foo = $delete_foo->fetch(PDO::FETCH_ASSOC);
echo $delete_foo['name'] . " has been deleted !";

这会更容易。我只是想知道,我使用第一种方法,但它只是考虑到了,我找不到答案。

php mysql database pdo sql-delete
3个回答
1
投票

postgresql中,有一个名为RETURNING的删除语句的专有扩展。 Sql Server提供类似的东西,他们称之为OUTPUT

例如,以下DELETE语句中的OUTPUT DELETED。*将返回从ShoppingCartItem表中删除的所有列:

DELETE Sales.ShoppingCartItem  
    OUTPUT DELETED.*;  

不幸的是,mysql没有像上面那样的东西。如果你删除了一行它就消失了(除非你回滚事务而不是提交)。如果要选择数据,则需要在DELETE之前执行SELECT


1
投票

DELETE查询不会返回任何结果(除受影响的行),因此PDO::query将不会有任何可用的数据来获取。


1
投票

对于提供的示例,额外的选择查询没有任何意义。因为你已经拥有了你的$ value。

我宁愿说你需要整体简化你的PDO代码。将以下代码段与您的代码段进行比较

$foo = $db->run("SELECT foo FROM table WHERE value = ?", [$value])->fetchColumn();
$db->run("DELETE FROM table WHERE value = ?", [$value]);
echo "$foo has been deleted!";

run()函数可以通过一个非常小的PDO修改来实现:

class MyPDO extends PDO
{
    public function run($sql, $args = NULL)
    {
        $stmt = $this->prepare($sql);
        $stmt->execute($args);
        return $stmt;
    }
}

代码取自我的文章Simple yet efficient PDO wrapper

© www.soinside.com 2019 - 2024. All rights reserved.