PDO 语句不起作用或显示错误

PDO Statement Doesn't Work Or Show Errors

有人可以指出这段代码有什么问题吗,或者至少解释一下如何从中获取任何错误消息?我不知道如何解决比这更远的问题。

  try {
  $db = new PDO($dbhost, $dbuser, $dbpassword);
  $sql = "INSERT INTO reports (Type, Location, Urgency, Description, Suggestion, Confidential, Email, Date, Time, Status, Link, ID, Title, Dopen) VALUES ('$type','$location','$urgency','$description','$solution','$confidential','$name','$date', '$time','Open','$link','$id', '$title','$date2')";
  $sth = $db->query($sql);}

  catch(PDOException $e) {echo $e->getMessage();}

PDO 构造函数中的第一个变量不仅是主机名。

这是直接来自文档页面的示例:

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

但是看看你的变量名,我怀疑你的 $dbhost 只包含像 "localhost"

这样的东西

添加第二行:

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

我会这样做。

 try {
  $db = new PDO($dbhost, $dbuser, $dbpassword);
  $stmt = $dbh->prepare("INSERT INTO reports (Type, Location, Urgency, Description, Suggestion, Confidential, Email, Date, Time, Status, Link, ID, Title, Dopen) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
  $stmt->execute(array($type,$location,$urgency,$description,$solution,$confidential,$name,$date, $time,'Open',$link,$id, $title,$date2));
  }

  catch(PDOException $e) {echo $e->getMessage();}

如果这不起作用,请告诉我们错误消息是什么。

在 PDO 中使用准备好的语句,这是使用 PDO 的最大原因之一。只是将变量粘贴到您的 SQL 中很容易产生错误,sql 注入等

为了让我的回答更完整,请按照其他人的建议去做。

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

并且正如已经指出的那样,$dbhost 应该是 DSN。

听起来您确实需要阅读 PDO 的文档。阅读文档后,它确实是一个可以正确使用的简单抽象层。 http://php.net/pdo