PHP的PDO插入语句失败,即时通讯没有任何错误

时间:2019-03-22 18:04:43

标签: php pdo

我有一个失败的非常简单的pdo insert语句。即时通讯没有任何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 :(得分:0)

创建PDO语句时是否可以添加以下内容?

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

然后,您可以将查询放入try/catch块中,然后查看实际错误。抓住ExceptionPDOException

答案 1 :(得分:0)

我认为这是错误的$DSN = "mysql:host = localHost; dbname=cms";,请尝试使用小写的本地主机

有趣的是,我只是对此进行了一些测试,看起来主机可以有一个空格,但数据库名称没有空格,但它不返回错误,只是一个空的PDO对象,例如如果我是var dump this:

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

我得到object(PDO)#2 (0) { },但没有落入我的

catch(PDOException $e) {块,只是让我面临死亡的白屏(除了我的var dump)

但这是:PDO("mysql:host = $host;dbname=$dbname;charset=utf8mb4", $user, $pass);完美连接。

最后,我认为没有空格是更简单,更标准的。但是缺少PDOException的这一点值得其他有类似问题的人