我想知道我们是否仍然可以使用新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 !";
这会更容易。我只是想知道,我使用第一种方法,但它只是记住了,我没有找到答案。
答案 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