首页 > 解决方案 > 使用 Postgres 添加和删除查询

问题描述

我正在尝试创建 3 个相互连接的页面。

请求页面 已删除页面 已接受页面

数据库中对应的是:

prenotaziones prenotazioneAcccettate prenotazioneCancellate

当用户完成表单字段时,将在“请求页面”中进行输入。从这里可以接受或拒绝请求。每次接受或拒绝请求时,都会从“请求页面”中删除。

现在的问题是,虽然在 mysql 中所有这些过程对我来说都很完美,但在 postgres 上,我的代码唯一要做的就是从“请求”中删除,而不是在其他页面上插入任何内容。

这是代码:

 <td>
        <a href="prenotazioniRichieste.php?delete=<?php echo $id; ?>"onclick="return confirm ('Are you sure?');"><img src="image/cross.png"></a>
    </td>
    <td>
        <a href="prenotazioniRichieste.php?accept=<?php echo $id; ?>"onclick="return confirm ('Are you sure?');"><img src="image/check.png"></a>
    </td>

    </tr>

    <?php
     $i++;
    }
    if(isset($_GET['delete'])){
           $delete_id = $_GET['delete'];
        //   mysqli_query($dbh,"INSERT INTO PrenotazioneCancellate SELECT * FROM Prenotazione WHERE id='$delete_id'");
        //   mysqli__query($dbh,"DELETE FROM prenotaziones WHERE id='$delete_id'");
        // header("location: prenotazioniRichieste.php");


        $sqld1 = "INSERT INTO prenotazioneCancellate SELECT * FROM prenotaziones WHERE id='$delete_id'";
            $resultd1 = $dbh->prepare($sqld1);
            $resultd1->execute();
        $sqld2 = "DELETE FROM prenotaziones WHERE id='$delete_id'";
            $resultd2 = $dbh->prepare($sqld2);
            $resultd2->execute();

    }

    if(isset($_GET['accept'])){
           $accept_id = $_GET['accept'];
       //    mysqli_query($dbh,"INSERT INTO PrenotazioneAccettate SELECT * FROM Prenotazione WHERE id='$accept_id'");
       //    mysqli_query($dbh,"DELETE FROM Prenotazione WHERE id='$accept_id'");
       //    header("location: prenotazioniRichieste.php");
        $sqla1 = "INSERT INTO PrenotazioneAccettate SELECT * FROM prenotaziones WHERE id='$accept_id'";
            $resulta1 = $dbh->prepare($sqla1);
            $resulta1->execute();
        $sqla2 = "DELETE FROM prenotaziones WHERE id='$accept_id'";
            $resulta2 = $dbh->prepare($sqla2);
            $resulta2->execute();
    }
    echo "</table>";
?> 

标签: phppostgresql

解决方案


第一个变化是:

$sqld1 = "INSERT INTO \"prenotazioneCancellate\" SELECT * FROM prenotaziones WHERE id='$delete_id'";

第二个是(如果您使用 PDO 和准备好的语句并且不想担心变量和 sql 注入):

 $sqlQuery = "INSERT INTO public.\"prenotazioneCancellate\" 
                  SELECT * FROM public.prenotaziones 
              WHERE public.prenotaziones.id=:id_to_delete";
 $loStatement = $dbh->prepare($sqlQuery);
 $loStatement->bindValue(':id_to_delete', $delete_id, PDO::PARAM_INT);
 $loStatement->execute();
 $loResult = loStatement->fetchAll();

在 postgres 中,您的数据库可以分布在模式中。多数民众赞成例如公开。您可以使用带有大写字母的表格,但必须以正确的方式对其进行转义。您的删除工作,因为表名总是小写字母:prenotaziones

最后一个:

try {
   $sqlQuery = "INSERT INTO public.\"prenotazioneCancellate\" 
                      SELECT * FROM public.prenotaziones 
                  WHERE public.prenotaziones.id=:id_to_delete";
   $loStatement = $dbh->prepare($sqlQuery);
   $loStatement->bindValue(':id_to_delete', $delete_id, PDO::PARAM_INT);
   $loStatement->execute();
   $loResult = loStatement->fetchAll();
}
catch(Exception $e) {
//do something with the error
}

推荐阅读