我正在尝试使用两个条件从表中删除一行。这是我目前的代码:
<?php
require 'database.php';
$id=0;
$od=0;
if(!empty($_GET['id_espece'])){
$id=$_REQUEST['id_espece'];
}
if(!empty($_GET['id_valor'])){
$od=$_REQUEST['id_valor'];
}
if(!empty($_POST)){
$id= $_POST['id_espece'];
$od= $_POST ['id_valor'];
$pdo=Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'DELETE FROM mode_valorisation WHERE "id_espece" = ? and "id_valor" = ? ';
$q = $pdo->prepare($sql);
$q->execute(array($id,$od));
Database::disconnect();
header("Location: page-valo.php");
}
?>
<form class="form-horizontal" action="page-supprimervalo.php" method="post" style="background: #89e29a; border-color: black; border-radius: 20px; padding: 5px;width: 500px; position: relative;right: -480px;" >
<input type="hidden" name="id_espece" value="<?php echo $id;?>"/>
<input type="hidden" name="id_valor" value="<?php echo $od;?>"/>
</form>
我试过这里提出的解决方案: How to Delete a Record in php that has composite (multi-column) primary key
$sql = "DELETE FROM mode_valorisation WHERE id_espece = ? and id_valor = ? limit 1";
但是它给了我以下错误:
语法错误处于或接近“限制”LINE 1:... _ valorisation WHERE id_espece = $ 1和id_valor = $ 2 limit 1 ^
谢谢;
答案 0 :(得分:1)
您无法在LIMIT
声明中使用DELETE
。
所以带占位符的正确SQL是:
DELETE FROM mode_valorisation WHERE id_espece = ? and id_valor = ?;
- 这将删除指定为id_espece
和id_valor
的所有行(如果有)。
如果您只需要删除单行,请使用带有DELETE
子查询的SELECT
(我认为mode_valorisation
有PK id
;如果不是,请将查询编辑为使用正确的PK名称):
delete from mode_valorisation where id in (
select id from mode_valorisation
where id_espece = ? and id_valor = ?
order by id desc
limit 1
);
- 在这里你可以使用ORDER BY
语句来控制你要删除的几行(如果有的话)中的哪一行;我使用order by id desc
删除了“最新”行。
答案 1 :(得分:-1)
首先,不要对表名/列名使用引号。 其次,没有限制&#39;在您的查询中。 我使用相同的参数和表在我的末尾运行代码,它运行得很好。