Получите доступ к идентификатору объекта, вставленного после подготовленного оператора в PHP, используя MYSQLi - PullRequest
6 голосов
/ 09 февраля 2012

Мне нужен идентификатор последнего вставленного объекта.Я использую подготовленные заявления, чтобы избежать внедрения 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 всегда, несмотря на наличие записи в базе данных

Решение Элемент былвставляется в базу данных.Проблема заключалась в том, что когда я создал идентификатор таблицы, это не целое число, а varchar, представляющий идентификатор сотрудника.Чтобы исправить это, я добавил идентификатор сотрудника в качестве дополнительного столбца в таблице и использовал первичный ключ id по умолчанию int auto_increment, и он работал.

1 Ответ

3 голосов
/ 09 февраля 2012

Попробуйте изменить $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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...