MySQL SQL_INSERT_ID () и LAST_INSERT_ID не работают

0

Я использую MySQL/PHP/Apache на недавнем MacBook Pro со всеми запросами на localhost. Я искал, но не смог найти решение моей проблемы.

Мой PHP-скрипт успешно вставляет запись в основную основную таблицу, чей первичный ключ имеет именованный идентификатор и является полем "Автоматическое увеличение", но он не может зафиксировать значение этого идентификатора для использования с другим INSERT в другой таблице, когда я пытаюсь использовать LAST_INSERT_ID() или SQL_INSERT_ID(). Данные, необходимые для второй таблицы, нуждаются только в этом значении и содержимом текстового поля из той же HTML-формы.

Неповторимо, что если я поместил целое число после знака равенства (в качестве теста), мой скрипт работает безупречно (т.е. Нет ошибки, и скрипт полностью вводит необходимые данные во вторую таблицу). Я пробовал SQL_INSERT_ID() и LAST_INSERT_ID() с теми же результатами: полностью белый экран.

Нет никаких ограничений внешнего ключа или чего-то сложного. Этот код выходит из строя и возвращает только белый экран:

$sql = "INSERT INTO Table1 
    (int1, str1, int2, int3, int4, int5) 
    VALUES (?, ?, ?, ?, ?, ?)";

if($stmt = mysqli_prepare($link, $sql)){
    mysqli_stmt_bind_param($stmt, "isiiii", 
        $param_int1, $param_str1, $param_int2, 
        $param_int3, $param_int4, $param_int5);
}

if(mysqli_stmt_execute($stmt)){
    $last_id = sql_insert_id();        // <--- problem statement
} else {
    echo "Something went wrong with the execution.";
}

Но код работает точно так, как я хочу, когда я использую целое число вместо рассматриваемой функции:

if(mysqli_stmt_execute($stmt)){
    $last_id = 6;
} else {
    echo "Something went wrong with the execution.";
}

Значение if (mysql_stmt_execute ($ stmt)) возвращает true, если первая вставка выполнена успешно, поэтому логично инициализировать переменную $ last_id сразу после этого. Это нормально? Где еще я могу посмотреть в своем коде? Нужно ли мне предоставлять данные в круглых скобках функции?

Версия MySQL - 5.7.21. Версия Mac OS X 10.13.4.

Я считаю себя начинающим новичком с PHP/MySQL. Любая помощь будет принята с благодарностью.

  • 0
    В самом PHP нет функции sql_insert_id() , вы используете фреймворк?
Теги:
mysqli
last-insert-id
mysql-insert-id

1 ответ

0
Лучший ответ

Пытаться

mysqli_insert_id($link);

Я думаю, вы путаете ООП и процедурные части библиотеки или что-то в этом роде.

Потому что, если я помню, что правильный sql_insert_id - из ныне несуществующей библиотеки mysql_*.

https://www.w3schools.com/php/func_mysqli_insert_id.asp

  • 0
    ДА! Огромное спасибо. Это работает сейчас. Я мог бы поклясться, что попробовал это, но заметил, что записал sql_ вместо mysqli_ тоже. Я транскрибировал, хотя.
  • 0
    Конечно, это легко сделать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню