PDO声明不起作用或显示错误

时间:2015-02-12 19:07:24

标签: php sql pdo

有人可以指出这段代码有什么问题,或至少解释如何从中获取任何错误消息?我不知道如何麻烦拍得更远。

  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();}

3 个答案:

答案 0 :(得分:0)

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

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

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

但是看看你的变量名,我怀疑你的$dbhost只包含类似“localhost”的东西

答案 1 :(得分:0)

添加第二行:

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

答案 2 :(得分:0)

我会这样做。

 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