Вставьте в таблицу белый результат - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь сделать вставку в таблицу 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 (nominativo, электронная почта, данные, orario_inizio, orario_fine, oggetto, nominativoi, emaili, nominativoe, emaile, stanza 'aaaaaaaaaaaaaaaaa) (, «aaa @ email.com», «2018-10-04», «09:30», «12:30», «aaaaa», «bbbb bbbb», «bbbb@email.com», «cccc ccc», 'cccc @ email.com', 1) "

Как вы думаете, как я могу решить эту проблему?Спасибо

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Помните, что для сравнения PHP null == 0 приведет к true .

Затем ваш сценарий разрешает условие if $prenotato == 0 AND $stanza == 0 как TRUE и TRUE и приступает к печати второго дампа var.

0 голосов
/ 04 октября 2018

MySQL очень расслаблен синтаксисом, это может быть плюсом, если вы не являетесь экспертом по базам данных, но может привести к «неожиданным» ошибкам, когда он делает неверные предположения.С другой стороны, PostgreSQL имеет тенденцию быть очень строгим, когда дело доходит до определения данных.Вы сказали Postgres, что ваши поля названы:

"nominativo" с кавычками и пробелами, а не nominativo

"email" с кавычками и пробелами, а не по электронной почте

"Оггетто" с кавычками и пробелами, не оггетто

"Номинативои" с кавычками и пробелами, не номинативои

"Номинативо" с кавычками и пробелами, не номинативо

Значит, вы говорите, что столбцы nominativo, email, oggetto, nominativoi и nominativoe не существуют.

Это предложение:

    INSERT INTO prenotazione (
    "nominativo ","email ",data,orario_inizio,
    orario_fine,"oggetto ","nominativoi ",emaili,
    "nominativoe ",emaile,stanza)
    VALUES ('aaa aaaa','aaa@email.com','2018-10-04',
    '09:30','12:30','aaaaa','bbbb bbbb','bbbb@email.com','cccc 
    ccc','cccc@email.com',1);

Отлично работает.

Для postgres «nominativo» и nominativo не одно и то же, «на удивление» они для MySQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...