我有一个失败的非常简单的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");
}
}
}
答案 0 :(得分:0)
创建PDO语句时是否可以添加以下内容?
$connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
然后,您可以将查询放入try/catch
块中,然后查看实际错误。抓住Exception
或PDOException
答案 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的这一点值得其他有类似问题的人