【发布时间】:2023-03-22 18:21:01
【问题描述】:
我正在尝试插入 Postgres 表。但我不明白为什么它会失败。 (我在 mysql 中尝试过,它可以工作)。 这是我的数据库:
CREATE TABLE public.prenotazione
(
id integer NOT NULL DEFAULT nextval('prenotazione_id_seq'::regclass),
"nominativo " character(45) COLLATE pg_catalog."default",
"email " character(45) COLLATE pg_catalog."default",
"oggetto " character(200) COLLATE pg_catalog."default",
orario_inizio time(6) without time zone,
orario_fine time(6) without time zone,
"nominativoi " character(200) COLLATE pg_catalog."default",
emaili character(200) COLLATE pg_catalog."default",
"nominativoe " character(200) COLLATE pg_catalog."default",
emaile character(200) COLLATE pg_catalog."default",
stanza integer,
data date
)
config.php
<?php
$dbname = "postgres";
$host = "localhost";
$username = "postgres";
$dbh = new PDO("pgsql:dbname=$dbname;host=$host", $username, 123456789 );
?>
这是我的输入文件。
<?php
//Connecting to db here
require ('config.php');
// Richiedente
$nominativo = $_POST['nominativo'];
$email = $_POST['email'];
$oggetto = $_POST['oggetto'];
$data = $_POST['data'];
$orario_inizio = $_POST['orario_inizio'];
$orario_fine = $_POST['orario_fine'];
$stanza = 0;
// Personale Interno
$nominativoi = $_POST['nominativoi'];
$emaili = $_POST['emaili'];
// Persona Esterno
$nominativoe = $_POST['nominativoe'];
$emaile = $_POST['emaile'];
//aggiunta di un'ora ( per tornare indietro cambiare $newTimeEnd con $orario_fine
$dateTime = DateTime::createFromFormat('H:i', $orario_fine);
$dateInterval = DateInterval::createFromDateString('1 hour');
$dateTime->add($dateInterval);
$newTimeEnd = $dateTime->format('H:i');
//checkdata = query per il controllo delle prenotazioni.
$checkdata = "SELECT count(*) as prenotato
FROM Prenotazione
WHERE data='$data'
AND NOT ('$newTimeEnd' < orario_inizio OR orario_fine < '$orario_inizio')";
$querycheck = $dbh->prepare($checkdata);
$querycheck->execute();
$prenotato = $querycheck->fetch()[0];
var_dump($prenotato);
if ($prenotato == 0 AND $stanza == 0 ) {
$query1 = "INSERT INTO prenotazione (nominativo,email,data,orario_inizio,orario_fine,oggetto,nominativoi,emaili,nominativoe,emaile,stanza) VALUES ('$nominativo','$email','$data','$orario_inizio','$newTimeEnd','$oggetto','$nominativoi','$emaili','$nominativoe','$emaile',1)";
var_dump($query1);
$result1 = $dbh->prepare($query1);
$result1->execute();
$rex = 1;
$rex = 1;
}
else if ($prenotato == 1){
$query1 = "INSERT INTO Prenotazione (nominativo,email,data,orario_inizio,orario_fine,oggetto,nominativoi,emaili,nominativoe,emaile,stanza) VALUES ('$nominativo','$email','$data','$orario_inizio','$orario_fine','$oggetto','$nominativoi','$emaili','$nominativoe','$emaile',2)";
$result1 = $dbh->prepare($query1);
$result1->execute();
$rex = 1;
}
else
{
$rex = 0;
}
?>
我通过 var_dump 收到这个
NULL string(259) "INSERT INTO prenotazione (名词、电子邮件、数据、orario_inizio、orario_fine、oggetto、名词性、电子邮件、名词性、电子邮件、节) 值('aaa aaaa','aaa@email.com','2018-10-04','09:30','12:30','aaaaa','bbbb bbbb','bbbb@email.com','cccc ccc','cccc@email.com',1)"
在您看来,我该如何解决这个问题? 谢谢
【问题讨论】:
-
尝试在准备
if (!$stmt) { echo "\nPDO::errorInfo():\n"; print_r($dbh->errorInfo()); die(); }之后粘贴此错误。假设您正在使用 PDO -
感谢您的回答!结果如下: string(1) "0" string(246) "INSERT INTO prenotazione (nominativo,email,data,orario_inizio,orario_fine,oggetto,nominativoi,emaili,nominativoe,email,stanza) VALUES ('aaa aaaa', 'aaa@email.com','2018-10-04','09:30','12:30','aaaa','bbb','bbb@email.com','cccc','ccc @email.com',1)"
-
在 PHPMyAdmin 中尝试该查询,看看它是否返回任何错误
-
@Mike 为什么在我的 PhPMyAdmin 中?我正在使用 postgres
-
我的意思是,尝试在你的 mysql 数据库而不是你的代码中运行它。检查查询是否正确。
标签: php database postgresql