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

时间:2012-02-09 00:16:45

标签: php mysqli

我需要最后插入对象的id。我使用预准备语句来避免sql注入。 但我不知道如何获得身份证。

$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主键,并且它有效。

1 个答案:

答案 0 :(得分:3)

尝试将$result = $stmt->get_result();更改为$result = $stmt->insert_id;

get_result()更适合SELECT次查询,而不是INSERT次。

http://php.net/manual/en/mysqli-stmt.get-result.php

http://php.net/manual/en/mysqli-stmt.insert-id.php