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






Можете ли вы добавить следующее при создании инструкции 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 стоит отметить для всех, у кого есть аналогичная проблема.