一直试图获取SCOPE_IDENTITY()(最后一个插入到DB中的ID)并将其作为变量存储在我的PHP函数中。
这是我目前拥有的:
// Confirm booking (update database) function public function insert_userPost($conn) { // SQL INSERT command $sql = (" INSERT INTO userPost (content, submitted, emotion) VALUES ('$this->post', 'NOW()', '$this->emotion'); "); if ($conn->query($sql) === TRUE) { //echo "success"; $sql = ("SELECT SCOPE_IDENTITY() as Id"); $result = $conn->query($sql); echo $result; //header('Location: feed.php?filter=all&page=1'); } else { echo "Error: " . $sql . "<br>" . $conn->error; } }
我做错了什么?
编辑:
另外…在构造中,我试图在$ this-> post中传递ID($ this-> Id),但它返回0。我可以看到这是由于我只设置了$查询通过后this-> Id,因此返回0,但我不确定如何继续。有什么建议?
// 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) { // SQL INSERT command $sql = ("INSERT INTO userPost (content, submitted, emotion) VALUES ('$this->post', NOW(), '$this->emotion')"); if ($conn->query($sql) === TRUE) { //echo "success"; echo $this->Id = $conn->insert_id; //header('Location: feed.php?filter=all&page=1'); } else { echo "Error: " . $sql . "<br>" . $conn->error; } }
首先,您的问题被标记为mysql,但它SCOPE_IDENTITY()是一个SQL Server函数。就是说,您的代码包含$ conn-> error,因此我假设您使用的是MySQLi扩展名的MySQL。
mysql
SCOPE_IDENTITY()
与SQLServer等效的MySQLSCOPE_IDENTITY()是LAST_INSERT_ID()。但是调用它需要一个额外的查询,这既麻烦又 慢。
相反,建议您为此使用内置的MySQLi功能,即连接实例的$insert_id属性:
$id = $conn->insert_id;
大多数SQL库都为此提供了内置功能。如果您使用PDO作为数据库抽象层,则可以类似地使用PDO :: lastInsertId():
$id = $pdo->lastInsertId();
这对于SQL Server和MySQL(及其他)均适用。