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