如何使用OOP PHP获取最后插入到MySQL的id?

4
我有以下PHP类,我使用它来连接数据库和创建一个新实例:
class db{

    public $db_connection;

    public function __construct(){

        $this->db_connection = new mysqli("127.0.0.1","user","passwd","table");
        $this->db_connection->set_charset("utf8");

        if($this->db_connection->connect_errno) {
            echo "Failed to connect to database: " . $db_connection->connect_error;
        }
    }

    public function __destruct(){
        return $this->db_connection->close();
    }
}

我使用的代码将内容添加到数据库中:

$db = new db();

$success = $db->db_connection->query(
    "INSERT INTO users(
        name
    )
    VALUES(
        '".$_POST["firstname"].'
    )"
);

获取插入元素的ID:
if($success){
    $user_id = $db->db_connection->insert_id;
    echo $user_id; // outputs 0
}

尽管我在数据库中有多个条目,但我仍然获得值0,这是否有其他解决方法?该表的id也具有AUTO INCREMENT属性。

注意:代码已简化,且不是整个结构,但足以解释实际问题。


1
你的代码中存在引号问题,这个问题在你的真实代码中也存在吗?因为看起来这样做不会起作用。 - Erik
4
注意:直接在查询中使用$POST会导致SQL注入攻击。 - Tuncay Göncüoğlu
2
我们可以假设您在用户表上有一个自增的ID字段吗? - Jeff Puckett
3
你的引用有误。你还在使用原始的 $_POST,这会容易受到 SQL注入 的攻击。最后,你应该总是输出MySQL的错误信息。 - Machavity
1
@RmidiAyoub 不必使用 NULL。 - RiggsFolly
显示剩余7条评论
1个回答

1
为什么要将插入操作与轮询插入ID分开?在两种情况下,失败都意味着您没有添加行。如果在此期间对数据库链接执行任何其他操作,您将遇到复杂的情况,这可能就是发生在这里的情况。
if ($db->db_connection->query($insert)) {
   $user_id=$db->db_connection->insert_id;
} else {
   // add some error handling/logging
}

看不出区别,$insert 是 SQL 吗? - sdfgg45

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接