如何在课堂上保存最后一个ID?

Posted

技术标签:

【中文标题】如何在课堂上保存最后一个ID?【英文标题】:how to save last id inside class? 【发布时间】:2013-02-02 18:19:08 【问题描述】:

有一种方法可以将 $id 保存在类中,以便下次运行该函数时可以使用它?

到目前为止,在执行查询后,我在函数内获得了正确的 $id,但是当我重新运行该函数时,我再次得到一个未初始化的 $id。

class ShortURL 
    public $id;
    public $val2;

    function insert() 

        $conn = new PDO( DB_DSN, DB_USER, DB_PASS );
        $sql = "INSERT INTO art ( val1, val2 ) VALUES ( :val1, :val2 )";
        $st = $conn->prepare( $sql );
        $st->bindValue( ":val1", self::hash ( $this->id+1 ), PDO::PARAM_STR );
        $st->bindValue( ":val2", $this->val2, PDO::PARAM_STR );     
        $st->execute();
        $this->id = $conn->lastInsertId();
        $conn = null;
    

【问题讨论】:

在调用insert()之前是否创建了类的新对象?要么不这样做,要么使用静态属性。 请注意,仅当您只是插入到这个表中时,跟踪 id 才会有用。 lastInsertId() 不是特定于表的。 是的,我先创建一个类的新对象。我会尝试使用静态来查看它是否有效。我想作为最后的手段从数据库中获取 id 并使用它:D 【参考方案1】:

如果在执行函数之前创建类的新实例,则变量将被重置。因此,当您执行以下操作时:

$insert = new ShortURL();
$insert->insert();
echo $insert->id;
//You should see your value correctly
$insert = new ShortURL();
echo $insert->id;
//Now that you initialized the function again, the value is cleared

尝试创建您的类,然后重用该类的相同实例。

【讨论】:

啊……你说得对。由于我不能重用该类的相同实例,我想我最好的选择是立即使用正确的 id 更新数据库,或者将 $id 值保存在会话中。我想会话的想法更好。

以上是关于如何在课堂上保存最后一个ID?的主要内容,如果未能解决你的问题,请参考以下文章

如何在课堂上设置两个外键? DJANGO ORM

如何使用 linq 实体仅从 sql 表中选择最后一个条目

课堂练习四

如何在 eloquent 中执行依赖于表的最后一行的更新和保存操作?

如何在 C++ 中比较两个结构字符串

如何在以编程方式将 newInsert 插入地址簿后获取最后插入的 RawContacts ID?