编写PDO DELETE查询值

时间:2016-12-27 18:54:10

标签: php mysql database pdo sql-delete

我想知道我们是否仍然可以使用新DELETE 中的作为SELECT,或者我们是否真的需要{{} 1}}之前呢?

示例:
改变这个

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 !";

这会更容易。我只是想知道,我使用第一种方法,但它只是记住了,我没有找到答案。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

  

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

DELETE Sales.ShoppingCartItem  
    OUTPUT DELETED.*;  

不幸的是,mysql 没有具有上述内容。如果你删除了一行它就消失了(除非你回滚事务而不是提交)。如果要选择数据,则需要在DELETE

之前执行SELECT

答案 2 :(得分: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