у меня есть небольшой проект базы данных с помощью HTML-формы и PHP кода. Он отлично работает, за исключением последней части. В принципе, у меня есть настройка подключения к базе данных и работаю на моем PHP, и, нажав кнопку «Добавить», она должна вставить значения из формы в базу данных. Мой преподаватель сказал, что из-за ограничений таблицы он должен быть вставлен в определенном порядке, в основном адресная таблица сначала, а затем таблица персонала. ЕСЛИ я прокомментирую часть кода для сотрудников, появляется моя успешная страница подтверждения, и каждый раз адрес появляется в базе данных с помощью auto incremented address_id. Проблема в том, что я должен запрашивать MAX (Address_id) и использовать это для вставки части персонала, поскольку он использует address_id как внешний ключ. Когда я это делаю, я получаю ошибку ограничения внешнего ключа в каскаде обновления. Если я полностью вытащил код персонала INSERT и поместил «debug» для печати MAX (address_id), он печатает правильно. Я просто не могу заставить его правильно вставить в стол для сотрудников, чтобы все из моей формы создавало отчет о персонале. Вот код:PHP/MYSQL Выбор значения MAX и использовать его в качестве вставленного значения
$userQuery = "INSERT INTO address (address, district, city_id, postal_code, phone)
VALUES ('$address', '$district', '$city', '$postal_code', '$phone') ";
$addressResult = mysqli_query($connect, $userQuery);
if (!$addressResult)
{
die("Could not successfully run query ($userQuery) from $db: " .
mysqli_error($connect));
}
$maxQuery = "SELECT MAX(address_id) FROM address";
$result = mysqli_query($connect, $maxQuery);
$row = mysqli_fetch_assoc($result);
if (!$result)
{
die("Could not successfully run query ($userQuery) from $db: " .
mysqli_error($connect));
}
/**else
{
print ("<p>Average hourly wage:".$row['MAX(address_id)']."</p>");
}**/
$userQuery1 = "INSERT INTO staff (first_name, last_name, address_id, email, store_id)
VALUES ('$first_name', '$last_name', '$row', '$email', '$store_id')";
$staffResult = mysqli_query($connect, $userQuery1);
if (!$staffResult)
{
die("Could not successfully run query ($userQuery1) from $db: " .
mysqli_error($connect));
}
else
{
print(" <h1>New Staff Record Added!</h1>");
print ("<p>The following record was added:</p>");
print("<table border='0'>
<tr><td>First Name</td><td>$first_name</td></tr>
<tr><td>Last Name</td><td>$last_name</td></tr>
<tr><td>Email</td><td>$email</td></tr>
<tr><td>Store ID</td><td>$store_id</td></tr>
<tr><td>Address</td><td>$address</td></tr>
<tr><td>City</td><td>$city</td></tr>
<tr><td>District</td><td>$district</td></tr>
<tr><td>Postal Code</td><td>$postal_code</td></tr>
<tr><td>Phone</td><td>$phone</td></tr>
</table>");
}
Вместо того чтобы использовать 'MAX()', а также, просто используйте 'mysqli_insert_id'. Это вернет идентификатор из предыдущего оператора INSERT – LeeR
После того, как вы выполните 'INSERT', вы можете использовать' mysqli_insert_id ($ connect) 'для получения идентификатора, который был назначен. Вы также можете использовать 'LAST_INSERT_ID()' в запросе MySQL, чтобы получить это. 'MAX (address_id)' - плохой способ сделать это. – Barmar
, так что я могу поместить mysqli_insert_id ($ connect) в мой запрос на вставку для таблицы сотрудников? и что бы вставить последний созданный идентификатор из первой вставки? –