我想在插入查询之前,将变量的值设置为在数据库中插入的最后一个ID。
目前我有以下代码:
// Construct
public function __construct($content, $emotion, $conn)
{
$this->content = $content;
$this->emotion = $emotion;
$this->post =
"<div id=\'post\'>
<div id=\'postContent\'>
<p><b>I\'m $this->emotion because</b> $this->Id $this->content<span class=\'emot\'id=\'$this->emotion\'></span></p>
</div>
<div id=\'postInfo\'>
<span class=\'postRelate\' title=\'Click to relate +1\'><p><b>relate</b> (0)</p></span>
<span class=\'postSubmitted\'><p>submitted X minutes ago</p></span>
</div>
</div>";
}
// Confirm booking (update database) function
public function insert_userPost($conn)
{
if($this->content != "")
{
// SQL INSERT command
$sql = ("INSERT INTO userPost (content, submitted, emotion)
VALUES ('$this->post', NOW(), '$this->emotion')");
$this->Id = $conn->insert_id;
if ($conn->query($sql) === TRUE)
{
header('Location: feed.php?filter=all&page=1');
}
else
{
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
else
{
header('Location: post.php');
}
}
在构造中,我将变量$ post设置为包含$ this-&gt; Id变量的div。
在insert_userPost()函数中,我正在插入一个包含$ this-&gt; post的查询,另一个将Id设置为插入数据库的最后一个ID。我知道它已成功从数据库中获取ID。但是,由于我在插入之前明显获得了Id 的值,因此在插入后它没有正确地出现在$ post上。
答案 0 :(得分:0)
您无法从数据库中获取ID,除非您确实插入了一行。很难预测MySQL使用的是什么ID。
您必须在构造中添加帖子以获取ID以供参考。您可以在数据库中将新列设置为posted=false
和submitted=NOW()
。
在insert_userPost()
中设置posted=true
并删除posted=false WHERE submitted<DATE_SUB(NOW(), INTERVAL -1 DAY)
的所有行。
另一种解决方案是将所有内容临时存储在没有ID的会话变量中,并从会话中存储/获取更改。发布时,将其添加到数据库中!