я вставляю данные из формы, которую я хочу, когда я буду вставлять данные, поэтому первичный идентификатор первого столбца, который используется во втором столбце в качестве внешнего ключа, должен быть увеличен
я пробовал этот код, но не работает
код первой таблицы
$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
Попробуй это:
// 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)");
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.