Сбой операторов вставки php pdo, и я не получаю никаких ошибок

у меня есть то, что должно быть очень простым оператором вставки pdo, который терпит неудачу. я не получаю никаких ошибок php, хотя я не знаю, как интегрировать обработку ошибок pdo в этот скрипт

Я подтвердил, что данные получены из формы. и если вы посмотрите на мой код, все работает, включая базовую проверку. это идет не так, когда я пытаюсь вставить. я был на компьютере в течение последних двух часов, пробуя различные методы сообщения об ошибках pdo, которые я нашел в Интернете, и ни один из них не работает

<?php

$DSN = "mysql:host = localHost; dbname=cms";
$connect = new PDO($DSN, 'root', '');
?>


<?php
ini_set('display_errors', true); // set to false in production
error_reporting(E_ALL);
?>

<?php


  if (isset($_POST["submit"])){
    $postTitle = $_POST["postTitle"];
    $category  = $_POST["category"];
    $image     = $_FILES["image"]["name"];
    $target    = "uploads/".basename($_FILES["image"]["name"]);
    $postDescription = $_POST["postDescription"];
    $admin = "cole";
    date_default_timezone_set("Europe/Dublin");
    $currenttime = time();
    $datetime= strftime("%B-%d-%Y %H:%M:%S", $currenttime);

    if (empty($postTitle)){
      $_SESSION["error"] = "please add a post title";
      redirect("addnewpost.php");
    }elseif (strlen($postTitle)<5){
      $_SESSION["error"] = "post title must be longer than 5 charachters";
      redirect("addnewpost.php");
    }elseif (strlen($postDescription)>999){
      $_SESSION["error"] = "post must be less than 1000 charachters";
      redirect("addnewpost.php");
    }else {
      $sql = "INSERT INTO posts(datetime,title,category,author,image,post) VALUES(:entrytime,:postTitle,:postCategory,:adminName,:pic,:postText)";


      $stmt = $connect->prepare($sql);
      $stmt->bindValue(':entrytime',$datetime);
      $stmt->bindValue(':postTitle',$postTitle);
      $stmt->bindValue(':postCategory',$category);
      $stmt->bindValue(':admiNname',$admin);
      $stmt->bindValue(':pic',$image);
      $stmt->bindValue(':postText',$postDescription);
      $Execute = $stmt->execute();



      if ($Execute){
        $_SESSION["success"] = "data added successfully";
        redirect("addnewpost.php");
      }else {
    print_r($connect->errorInfo());
        $_SESSION["error"] = "something went wrong. data not added to table";
        redirect("addnewpost.php");
      }
    }
  }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
163
2

Ответы 2

Можете ли вы добавить следующее при создании инструкции PDO.

$connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Затем вы можете поместить свой запрос в блок try/catch и увидеть реальную ошибку. Либо лови Exception, либо PDOException

Я думаю, что это неправильно $DSN = "mysql:host = localHost; dbname=cms"; попробуйте с локальным хостом в нижнем регистре

интересно, я только что провел небольшое тестирование, и похоже, что у вас может быть пробел с хостом, но не с именем базы данных, но он не возвращает ошибку, просто пустой объект PDO, например. если я выгружу это:

PDO("mysql:host = $host;dbname =$dbname;charset=utf8mb4", $user, $pass)

Я получаю object(PDO)#2 (0) { }, но это не попадает в мои

catch(PDOException $e) { заблокировать, просто оставив меня с белым экраном смерти (помимо моего дампа var)

однако это: PDO("mysql:host = $host;dbname=$dbname;charset=utf8mb4", $user, $pass); отлично соединяется.

В конце концов, проще и стандартнее, я думаю, не иметь пробелов. Но это отсутствие PDOException стоит отметить для всех, у кого есть аналогичная проблема.

Другие вопросы по теме