1

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

クエリが機能しないのはなぜですか....

4

2 に答える 2

2

'sets'テーブル名として解析されていません。SQL はそれを文字列と見なします。

MySQL を使用している場合は、アポストロフィを逆引用符に切り替えてみてください。他のシステムでは (ANSI 標準の) 二重引用符が使用される場合があります。

または、引用符を完全に削除します。 setsは、私が今まで使用した SQL のどのフレーバーのキーワードでもないので、これらのフレーバーのいずれかを使用している場合は、それを引用する必要はまったくありません。

于 2012-09-14T22:08:46.043 に答える
1

列とテーブル名は (`) でカプセル化する必要があります

INSERT INTO `sets` () VALUES ()
于 2012-09-14T22:09:48.583 に答える