как вставить данные из столбца первичного ключа в ключ foregin

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

я пробовал этот код, но не работает

код первой таблицы

$this->db->query("insert into af_ads (ad_title,ad_pic,ad_description)
values ('$title','$filepath','$description')");

код второй таблицы

   $this->db->query("insert into af_category (cat_type,ad_id_fk)
values ('$category','ad_id')");

ПРИМЕЧАНИЕ: я хочу вставить ad_id в ad_id_fk

0

Решение

Попробуй это:

// Your first query
$this->db->query("insert into af_ads(ad_id, ad_title, ad_pic, ad_description)
values ('', '$title', '$filepath', '$description')");

$ad_id = $this->db->insert_id(); // This returns the id that is automatically assigned to that record

// Use the id as foreign key in your second insert query
$this->db->query("insert into af_category (cat_type,ad_id_fk)
values ('$category', $ad_id)");
1

Другие решения

MySQL обеспечивает LAST_INSERT_ID функция как способ получения значения, сгенерированного для столбца AUTO_INCREMENT, из непосредственно предшествующего оператора INSERT.

Многие клиентские библиотеки делают это доступным (например, PDO lastInsertId функция).

(Я не знаком с CodeIgniter или ActiveRecord, поэтому не могу сказать, как это стало доступно.

Ваш код выглядит так, как будто он использует интерфейс PDO … но я не уверен в этом.

 # either we need to check return from functions for errors
# or we can have PDO do the checks and throw an exception
$this->db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

# attempt insert which will generate AUTO_INCREMENT value
$this->db->query("INSERT (ad_id, ... ) VALUES (NULL, ...)");

# if previous insert successfully inserted a row (or rows)
$ad_id = $this->db->lastInsertId();

Вы действительно должны проверить, была ли предыдущая вставка успешной или нет. Если вы не собираетесь писать код, который проверяет себя, тогда PDO предоставляет механизм, который выполняет эту проверку автоматически, и выдает исключение в случае ошибки MySQL.

Я избегал копирования вашего исходного кода, который выглядит так, как будто он уязвим для SQL-инъекций. Если вы используете PDO, вы можете эффективно использовать подготовленные операторы с заполнителями связывания, а не включать значения в текст SQL.

0