使用MYSQLi在PHP中准备语句后访问插入的对象的id。

6

我需要最后插入对象的id。我使用预处理语句来避免SQL注入。但是我不确定如何获取id。

$sql = "INSERT IGNORE INTO faculty (id, term, role, prefix, first_name, 
               middle_name, last_name, suffix) VALUES (?,?,?,?,?,?,?,?)";

        if (!($stmt = $mysqli->prepare($sql)))
            echo "Faculty Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;

        $stmt->bind_param('sissssss', 
                $faculty['id'], 
                $faculty['term'], 
                $faculty['role'],
                $faculty->name->prefix,
                $faculty->name->first,
                $faculty->name->middle,
                $faculty->name->last,
                $faculty->name->suffix
        );

        if (!$stmt->execute())
            echo "Faculty Execute failed: (" . $mysqli->errno . ") " . $mysqli->error;

        $result = $stmt->insert_id;
        echo "\n Result:" . $result;    
        $stmt->close();             

尽管数据库中有条目,结果始终为0

解决方案 元素已插入数据库。问题出在我创建表时,id不是整数,而是一个表示员工id的varchar类型。为了解决这个问题,我在表中添加了员工ID作为另一列,并使用默认的id int auto_increment primary key,然后问题得到了解决。

1个回答

3

我实际上找到了那个函数并尝试使用它,但它不断返回0。 - user1165788
1
合理性检查 - 它是否确实插入了一行?即它是执行了 INSERT 还是 IGNORE - Joe
我解决了。它被插入到表中,但后来我意识到我的主键ID是员工代码,我设置了它,所以它不会返回主键的值。我只需在数据库中设置员工代码作为附加列,并使用默认的自动递增ID作为主键,就可以解决问题了。 - user1165788

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