2017-07-09 6 views
0

2つの条件を使用してテーブルから行を削除しようとしています。これは私の現在のコードです:PHPを使用して2つの条件を持つテーブルから削除できません

<?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:...義務化WHERE id_espece = $ 1、id_valor = $ 2制限1^

ありがとうございます。

+0

どのデータベースを使用していますか? MySQL? PostgreSQL? – Qirel

+0

テーブル/列の引用符は使用しないでください。 – chris85

+1

エラーは意味をなさないが、クエリには 'limit'はありません。このコードのエラーは間違いありませんか? – chris85

答えて

-1

まず、テーブル名/カラム名には引用符を使用しないでください。 第2に、クエリに「制限」はありません。 私は同じパラメータとテーブルで私の最後にコードを実行し、うまくいきました。

+0

クエリで1つの条件を指定して同じコードを実行しただけで、問題が発生することはありません。 – Issam

+0

"テーブル名/列名に引用符を使用しない"は無関係で、場合によっては間違ったアドバイスたとえば、テーブル/カラム名がラクダスタイルの場合、ここでは該当しませんが、二重引用は多くの場合「良い」ものですが、ここでは悪いことではありませんが、ここではオプションです)。 – Nick

1

LIMITDELETEには使用できません。

だからプレースホルダを正しいSQLは次のとおりです。

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

- これはid_especeid_valor指定して(もしあれば)すべての行を削除します。

あなただけの単一の行を削除する必要がある場合は、SELECTサブクエリでDELETEを使用する(私は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ステートメントを使用して、削除する場合は複数のうちの1行を制御できます。私はorder by id descを使って "最新の"行を削除しました。

関連する問題