编写PDO DELETE查询值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写PDO DELETE查询值相关的知识,希望对你有一定的参考价值。
我想知道我们是否仍然可以使用来自新鲜的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 !";
这会更容易。我只是想知道,我使用第一种方法,但它只是考虑到了,我找不到答案。
答案
在postgresql中,有一个名为RETURNING
的删除语句的专有扩展。 Sql Server提供类似的东西,他们称之为OUTPUT
例如,以下DELETE语句中的OUTPUT DELETED。*将返回从ShoppingCartItem表中删除的所有列:
DELETE Sales.ShoppingCartItem
OUTPUT DELETED.*;
不幸的是,mysql没有像上面那样的东西。如果你删除了一行它就消失了(除非你回滚事务而不是提交)。如果要选择数据,则需要在DELETE之前执行SELECT
另一答案
DELETE
查询不会返回任何结果(除受影响的行),因此PDO::query
将不会有任何可用的数据来获取。
另一答案
对于提供的示例,额外的选择查询没有任何意义。因为你已经拥有了你的$ 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
以上是关于编写PDO DELETE查询值的主要内容,如果未能解决你的问题,请参考以下文章