如何在课堂上保存最后一个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?的主要内容,如果未能解决你的问题,请参考以下文章