1

OK、このクエリを取得しました(正常に動作し、すべてを挿入します...)

$db = Zend_Db_Table::getDefaultAdapter();
$data = array(
    "comment_id" => new Zend_Db_Expr("nextval('comments_comment_id_seq')"),
    "comment" => $comment,
    "comment_level" => 1,
    "is_active" => true,
    "status" => 0,
    "id" => $id,
    "user_id" => $_SESSION['role']['user_id'],
    "ts_create" => $created,
    "ts_mod" => $created
);
$db->insert($this->_name, $data);
$newID = $db->lastInsertId();

私も試しました

$newID = $db->insert($this->_name, $data);

そして、IDの値を取得できません。それはmysql(i)ではないので、それが私の最初の問題だと思います。postgresには、少なくとも私が慣れている方法では自動増分がないように見えるからです。だから私はここの誰かが私を助けてくれることを望んでいます。とにかく、新しく挿入されたアイテムで「comment_id」列IDを取得するには?原因今私はlastInsertIDを試しましたが、得られるのはfalseまたは1で、どちらの場合も間違っています。

4

3 に答える 3

5

GordonMは、zendの特定のドキュメントの方向を示してくれました。それを読んで、必要なものを見つけることができました。残念ながら、誰も実際の答えを提供しませんでした。ですから、私自身の質問に答えるつもりです。私と同じような立場で立ち往生しているときにつまずく可能性がある人のために。しかし、私を正しい方向に導いてくれたGordonMに賛成票を投じます。ありがとうGordonM

変化:

$newID = $db->insert($this->_name, $data);

に:

$newID = $db->lastSequenceId('comments_comment_id_seq');
于 2012-10-23T21:58:53.517 に答える
2

Zendのドキュメントから、シーケンスを使用して自動インクリメントを生成するデータベース(Postgresなど)では、lastInsertId()呼び出しでシーケンスを名前で指定する必要があります。

于 2012-10-23T21:40:51.727 に答える
0

自動インクリメントフィールドはPostgreSQLにシーケンスとして実装され、データベースは新しい値を挿入するときにこのシーケンスから読み取ります。正しい値を取得するには、lastInsertId()を呼び出すときに、そのシーケンスの名前を使用する必要があります。

于 2012-10-23T21:43:20.477 に答える