注意:我的问题不是查询失败的原因。
使用 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;
我尝试了有和没有try
和交易。无论如何,我得到以下信息:
Fatal error: Call to a member function bindParam() on a non-object in C:\wamp\www\Projetv0.2\Class_SetDAO.php on line 22
原因是我需要将表名封装在反引号中。但是(对我来说)有趣的部分还在后面……
var_dumps 的输出如下:
string 'ID: ' (length=4)
null
string 'DBH: ' (length=5)
object(PDO)[8]
string 'DBH: ' (length=5)
object(PDO)[8]
string 'InsertInSets: ' (length=14)
boolean false
string 'ID: ' (length=4)
string '0' (length=1)
string 'InsertInClosures: ' (length=18)
boolean false
我的问题:
鉴于我的查询没有通过,为什么我会得到一个0
for的值$id
,我已经设置了这个值,null
并且通常应该false
在查询失败时变为这个值?