php pdo операторы вставки терпят неудачу и я не получаю никаких ошибок - PullRequest
0 голосов
/ 22 марта 2019

у меня есть то, что должно быть очень простым оператором вставки 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");
      }
    }
  }

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

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

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

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

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

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

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

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

0 голосов
/ 23 марта 2019

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

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

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

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