Я использую 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. Любая помощь будет принята с благодарностью.
Пытаться
mysqli_insert_id($link);
Я думаю, вы путаете ООП и процедурные части библиотеки или что-то в этом роде.
Потому что, если я помню, что правильный sql_insert_id
- из ныне несуществующей библиотеки mysql_*
.
sql_insert_id()
, вы используете фреймворк?