Ошибка обновления при добавлении двузначного целого числа mysql

0

Я получаю сообщение об ошибке в вставке mySql, когда я вхожу, чтобы вставить двузначное целое число. При вводе целочисленного значения с одной цифрой все работает нормально, но для двойной цифры, например, 18, я получаю ошибку ограничения внешнего ключа (ниже), и столбец по умолчанию равен 1.

Невозможно добавить или обновить deposit_guard строку: сбой ограничения внешнего ключа (deposit_guard. tenants, CONSTRAINT tenants_to_properties FOREIGN KEY (listing_id) properties ССЫЛКИ (property_id))

Код вставки:

session_start();
require_once('../dbconnect.php');
if(isset($_POST["t_name"]))
/* multiline add to database and changed for my purposes http://www.webslesson.info/2017/03/multiple-inline-insert-data-using-ajax-jquery-php.html */
{
$t_name = $_POST["t_name"];
$t_email = $_POST["t_email"];
$t_deposit = $_POST["t_deposit"];
$t_start = $_POST["t_start"];
$t_duration = $_POST["t_duration"];
$prop_id = $_POST["prop_id"];
$query = '';
for($count = 0; $count<count($t_name); $count++)
{
$t_name_clean = mysqli_real_escape_string($conn, $t_name[$count]);
$t_email_clean = mysqli_real_escape_string($conn, $t_email[$count]);
$t_deposit_clean = mysqli_real_escape_string($conn, $t_deposit[$count]);
/* converting string to date: https://stackoverflow.com/questions/6238992/converting-string-to-date-and-datetime */
$t_duration_clean = mysqli_real_escape_string($conn, $t_duration[$count]);
$t_start_clean = date("y-m-d", strtotime($t_start[$count]));
$t_end = date('Y-m-d', strtotime("+" .$t_duration_clean[$count] ."months", strtotime($t_start_clean)));
$prop_id_clean = $prop_id[0];
if($prop_id_clean != '' && $t_name_clean != '' && $t_email_clean != '' && $t_deposit_clean != '' && $t_start_clean != ''  && $prop_id_clean != ''  && $t_duration_clean != '' && $t_end != '')
{
$query .= '
INSERT INTO tenants(listing_id, name, email, deposit_amount, s_date, duration, e_date) 
VALUES("'.$prop_id_clean.'","'.$t_name_clean.'", "'.$t_email_clean.'", "'.$t_deposit_clean.'", "'.$t_start_clean.'" , "'.$t_duration_clean.'" , "'.$t_end.'"); 
';
}
}
if($query != '')
{
if(mysqli_multi_query($conn, $query))
{
echo 'Tenant added';
}
else
{
    echo "Error updating record: " . mysqli_error($conn), $prop_id_clean;
}
}
else
{
echo 'All Fields are Required';
}
}
?>

Любые идеи, почему это может произойти? Я могу добавить код, если это необходимо, я использую PHP, если это приносит пользу. Спасибо!

PASTEBIN: https://pastebin.com/k6FZVBy6

  • 0
    Отредактируйте свой вопрос, вставив код insert ...
  • 0
    Я предполагаю, что это потому, что однозначное целое число, которое вы вставляете, оказывается приемлемым значением в другой таблице, к которой относится внешний ключ. Проверьте таблицу «properties» и посмотрите, каковы доступные значения «property_id». Вы, вероятно, обнаружите, что там нет 18.
Показать ещё 6 комментариев
Теги:
insert

1 ответ

0
  • Как для внешнего ключа, так и для первичного ключа данных тип и размер должны быть одинаковыми для обеих таблиц. Если размер или тип данных различны, это приведет к ошибке.
  • Для вашего случая размер целого отличается. В первичной таблице размер составляет 11 байт, а во вспомогательной таблице размер составляет 4 байта.

Ещё вопросы

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