Я использую MySQL / PHP / Apache на недавнем MacBook Pro со всеми запросами к localhost. Я искал, но не смог найти решение своей проблемы.
Мой PHP-скрипт успешно вставляет запись в основную основную таблицу, первичный ключ которой называется ID и является полем автоинкремента, но ему не удается записать значение этого идентификатора для использования с другой 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. Любая помощь будет принята с благодарностью.
Пытаться
mysqli_insert_id($link);
Я думаю, что вы путаете ООП и процедурные части библиотеки или что-то в этом роде.
Потому что, если я правильно помню sql_insert_id
от ныне несуществующей mysql_*
библиотека.
Других решений пока нет …