无法使用PHP从具有两个条件的表中删除

时间:2017-07-09 14:35:37

标签: php postgresql

我正在尝试使用两个条件从表中删除一行。这是我目前的代码:

<?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 ^

谢谢;

2 个答案:

答案 0 :(得分:1)

您无法在LIMIT声明中使用DELETE

所以带占位符的正确SQL是:

DELETE FROM mode_valorisation WHERE id_espece = ? and id_valor = ?;

- 这将删除指定为id_especeid_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;在您的查询中。 我使用相同的参数和表在我的末尾运行代码,它运行得很好。