我现在真的不知道该怎么做,我已经盯着它好几个小时了,并且要求它......我无法让它工作!。
require_once("Abstracts/DBManager.php");
require_once("UI/UI.Package.php");
class BlogDBM extends DBManager
{
private $table = "blog_records";
function saveRecord($title,$url,$desc,$feedId,$pubDate)
{
$PDO = $this->db->connect();
try
{
$query = $PDO->prepare("
INSERT INTO ".$this->table."
(title,url,desc,feed_id,pubdate) VALUES
(:title,:url,:desc,:feed_id,:pubdate)");
$query->bindParam(":title", $title);
$query->bindParam(":url", $url);
$query->bindParam(":desc", $desc);
$query->bindParam(":feed_id", $feedId, PDO::PARAM_INT);
$query->bindParam(":pubdate", $pubDate, PDO::PARAM_INT);
$query->execute();
//return $PDO->lastInsertId();
} catch(PDOException $e)
{
echo "Error " . $e->getMessage();
}
$PDO = NULL;
}
}
答案 0 :(得分:39)
只是想补充一点,因缺少错误信息而遭遇类似的挫折。
要阻止PDO静默失败,可以在PDO连接上设置错误模式。
$dbh = new PDO();
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
如果你想要错误但仍然继续,还有PDO::ERRMODE_WARNING
。
答案 1 :(得分:17)
我很确定MySQL在desc
字段名称上窒息 - 它是reserved word。您必须将其放入“引号”中,或者更好地更改字段名称。
对于错误报告,请使用errorInfo方法。您可以让PDO在异常中实际输出失败查询的结果,但默认行为 - 我认为 - 只有在根本无法进行查询时才会抛出异常,但如果查询不会失败是错误的。
答案 2 :(得分:4)
我也面临着这个错误。
我使用了print_r($con->errorInfo());
,它在数组的0000
键中提供了0th
。
然后我匹配所有列名,并发现我使用了错误的字段名称。
This节省了我的一天。
答案 3 :(得分:3)
将PDOStatement::bindValue()
与PDO::PARAM_BOOL
一起使用时也会发生这种情况。解决方案:只需切换到PDO::PARAM_INT
。
答案 4 :(得分:0)
当有人在主id字段上关闭/离开DB自动增量时,可能会出现类似的问题。
答案 5 :(得分:-1)
解决方案:确保在插入/更新/删除操作后或在页面关闭时调用PDO句柄上的提交。
$PDO->exec("COMMIT;");