php - 使用 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>";
?>
解决方案
第一个变化是:
$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
}
推荐阅读
- excel - ActiveSheets.Copy 生成路径/文件访问错误(错误 75)
- c# - 在C#中选中Combobox时如何设置多个字体样式
- logstash - 查找日志文件的 grok 模式
- function - 汇编程序中的 CALL MULTIPLY 函数
- xampp - $this->Auth->user() 在 AppController 中为 NULL
- java - 使用从 valueEventListener 之外的 Firebase 数据库检索的值
- reactjs - 如何在 Create react app 中使用 JEST 测试/模拟 API 调用
- node.js - 为 ansible 塔生成 oath2 令牌的 Nodejs 脚本
- java - 如何转换列表
进入列表 >? - php - Laravel,带来一个数组来查看