Php 为什么这个失败的PDO查询会返回“false”以外的内容?

Php 为什么这个失败的PDO查询会返回“false”以外的内容?,php,mysql,pdo,prepared-statement,Php,Mysql,Pdo,Prepared Statement,注意:我的问题是不是为什么查询失败 使用WampServer和phpMyAdmin 代码如下: function createRecord(){ $id=null; var_dump("ID: ",$id); $length=0; $dbh=$this->dbConnect(); var_dump("DBH: ", $dbh); $dbh->beginTransaction(); //try{ var_dump("DBH: ", $dbh); //$dbh-&g

注意:我的问题是不是为什么查询失败

使用WampServer和phpMyAdmin

代码如下:

function createRecord(){
 $id=null;
 var_dump("ID: ",$id);
 $length=0;
 $dbh=$this->dbConnect();
 var_dump("DBH: ", $dbh);
 $dbh->beginTransaction();
 //try{
  var_dump("DBH: ", $dbh);
  //$dbh->beginTransaction();
  $insertInSets=$dbh->prepare("INSERT INTO 'sets' () VALUES ()"); // PDO Statement object.  ID is generated via autoincrement.
  var_dump("InsertInSets: ", $insertInSets);
  $id=$dbh->lastInsertId();
  var_dump("ID: ",$id);
  $insertInClosures=$dbh->prepare("INSERT INTO 'closures' (ancestor,descendant,length) VALUES (:ancestor,:descendant,:length)");
  var_dump("InsertInClosures: ", $insertInClosures);
  $insertInClosures->bindParam(":ancestor", $id); //<- This is line 22
  $insertInClosures->bindParam(":descendant", $id);
  $insertInClosures->bindParam(":length", $length);
  //$dbh->commit();
  exit;
我的问题:


既然我的查询没有通过,为什么我会得到
$id
的值
0
,我已经将其设置为
null
,并且在查询失败时通常会变成
false

$id=$dbh->lastInsertId(); 
仅仅因为你的其他查询失败了,并不意味着这个查询失败了。返回的值根据不同的驱动程序而不同,但我假设如果没有最近添加的行,则数据库将返回0


尝试在函数开始时调用此函数,甚至在尝试插入内容之前,它也将返回0。

您忘记执行查询

加:

$dbh->execute()

然后您可以获取最后一个id:

$id=$dbh->lastInsertId()

$id=$dbh->lastInsertId();