При выполнении кода ошибки в журнале ошибок Postgres или в коде VS не отображаются. Пытаюсь вставить данные в PostgreSQL. Таблица остается пустой - PullRequest
0 голосов
/ 02 августа 2020

Моя цель - создать форум с возможностью создания топи c с полями, запрошенными PHP, с подробностями, именем, электронной почтой и датой и временем. Create_topi c. php - это файл, содержащий базовый c макет формы. Данные в этих полях захватываются в POST после нажатия кнопки submit.

После нажатия кнопки submit действие = "add_topi c. php" (код ниже). Файл, который будет обрабатывать данные, которые я пытаюсь вставить. внизу скрипта есть гиперссылка, которая ведет к месту, где будет находиться topi c. Я не дошел до фактической части отображения, поскольку в БД нет данных для отображения. Только в POST, который является временным.

В чем проблема

При выполнении кода ошибки в Postgres журнале ошибок или в коде VS не отображаются. Пытаюсь вставить данные в PostgreSQL. Таблица остается пустой.

Что я пробовал

Я пробовал изменить значения заполнителей с ":" на "$" на "?" и ни один из них, похоже, не помогает. Я убедился, что существует реальное соединение, вызвав целенаправленные сбои в коде. Журнал PG SQL сообщает мне, когда предоставлено недостаточно параметров или когда я пытаюсь вставить данные в таблицу, которая не существует. Так что ... связь есть .... Я думаю. Я могу просто вставить данные с терминала (у меня также есть другой код на моей домашней странице, который работает. Я использую этот код, потому что он включает ввод и извлечение из PostgreSQL). Нет ошибок в VS CODE OR LOG, когда код исполняется иначе. Спасибо за вашу помощь amigos. В лучшем случае новичок. Просто пытаюсь перейти к следующему вызову. Да пребудет с вами сила

<?php  

$tbl_name='forum_question'; 
require('forum_config.php');

try{
     $db = new PDO("pgsql:dbname=$dbname;host=$dbhost", $dbuser, $dbpass) or die();
     
}catch(PDOException $e)
{ 
    if(!$db){
        print'no luck';
        echo 'no luck';
       
    }
    echo-$e->getMessage(); 
}
 
$topic = $_POST['topic'];
$detail = $_POST['detail'];
$name = $_POST['name'];
$email = $_POST['email'];
$datetime=date("d/m/y h:i:s"); 
$inputdata = array ($topic, $detail, $name, $email, $datetime);

$query = $db->prepare('INSERT INTO forum_question(topic, detail, _name, email, _datetime) VALUES (:topic, :detail, :_name, :email, :_datetime)');

$query->bindParam(":topic",$topic);
$query->bindParam(":detail",$detail);
$query->bindParam(":_name",$name);
$query->bindParam(":email",$email);
$query->bindParam(":_datetime",$datetime);
$query->execute(array ($topic, $detail, $name, $email, $datetime)); 

$result = $query->fetchAll(PDO::FETCH_OBJ);

if($query){
    
    echo "successful connection to DB $dbname<BR><br>";
    echo "Below we have proof that POST data has been captured.
    <br> The goal is to store in the TABLE $tbl_name which is inside the DATABASE $dbname. 
    <br> The captured data shall be displayed in desired forum.";
    echo "<br>";
    echo "<br>";
    echo $result;


    $query = $db->prepare("SELECT * from forum_question");
    $query->execute();

    $query->fetchAll(PDO::FETCH_OBJ);
    echo "<br>";
    echo "<br>";
    
    echo $inputdata;
    echo "<br>";
    echo "<br>";
   
    echo "<br>";
    echo "topic: $topic";
    echo "<br>";
    echo "<br>";
    echo "detail: $detail";
    echo "<br>";
    echo "<br>";
    echo "name: $name";
    echo "<br>";
    echo "<br>";
    echo "email: $email";
    echo "<br>";
    echo "<br>";
    echo "<a href=main_forum_life.php>View your topic</a>";
    echo "<br>";
    echo"<br>";
   
    }
    else {
    echo "<a href='error.php'>No biggie. Let us regroup.</a>";
   
    die();
    }

?>

/* Below is the SQL for the table that I am trying to insert $topic, $detail, $name, $email and $datetime into. */

СОЗДАТЬ ТАБЛИЦУ forum_question (

forum_question_uid SERIAL UNIQUE PRIMARY KEY,
topic VARCHAR(255) NOT NULL,
detail TEXT NOT NULL,
_name VARCHAR(65) NOT NULL,
email VARCHAR(65) NOT NULL,
_datetime VARCHAR(25) NOT NULL,
_view SERIAL,
reply SERIAL
);

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

количество столбцов не соответствует количеству пропущенных значений столбца «topi c»:

$ pgquery = 'INSERT INTO forum_question (detail, _name, email, _datetime) VALUES (: topi c,: detail,: _name,: email,: _datetime) ';

0 голосов
/ 02 августа 2020

У вас AUTOCOMMIT выключен? см. [url] https://www.postgresql.org/docs/9.1/ecpg-sql-set-autocommit.html

В противном случае вам нужно сделать commit после вставки.

В этом случае вы не получите сообщение об ошибке, потому что ничего пошло не так. Данные были вставлены, а затем откат после завершения соединения.

...