Mysql_insert_id();
Формулировка задачи:
Есть код, отправляем данные в бд в одну таблицу далее нам нужно сразу отправить другие данные во вторую таблицу, но из первой таблицы нам нужно узнать ID которое AUTO_INCREMENT чтобы вставить это значение во вторую таблицу, пробовал и mysql_insert_id(); и last_insert_id(); и через запрос, ничего не помогает, вторая запись даже не записывается, только если ставлю mysql_insert_id(); то запись идет во вторую таблицу но айди пишется не тот который нужен. mysql_insert_id(); постоянно ноль пишет. Кто что подскажет как айди получить? Вот код
$dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $opt = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ); try { $dbh = new PDO($dsn, $user, $password, $opt); } catch (PDOException $e) { die('Подключение не удалось: ' . $e->getMessage()); } function pdoSet($allowed, &$values, $source = array()) { $set = ''; $values = array(); if (!$source) $source = &$_POST; foreach ($allowed as $field) { if (isset($source[$field])) { $set.="`".str_replace("`","``",$field)."`". "=:$field, "; $values[$field] = $source[$field]; } } return substr($set, 0, -2); } //file_put_contents('log123.txt', print_r($_GET, 1), FILE_APPEND); if (isset($_GET['phone']) && !empty($_GET['phone'])) { $values = array(); $values['phone'] = str_replace('+', '', $_GET['phone']); $values['phone'] = str_replace('(', '', $values['phone']); $values['phone'] = str_replace(')', '', $values['phone']); $values['phone'] = str_replace(' ', '', $values['phone']); $values['phone'] = str_replace('-', '', $values['phone']); $values['name'] = $_GET['name']; $values['domen'] = time(); if (!isset($_GET['short_name']) || $_GET['short_name'] == "") { $values['short_name'] = 'Online'; } else { $values['short_name'] = $_GET['short_name']; } $values['description'] = 'Заявка на кредит'; $values['date_add'] = time(); $values['access_part'] = '{"object-actual":[7,1],"object-archive":[7,0],"user-actual":[7,1],"user-friend":[7,1],"blacklist":[1,1],"fin-stats":[1,0],"list-source":[1,0],"logs":[5,0],"settings":[3,0],"stats":[1,0],"users":[3,1]}'; if (!isset($_GET['company_id']) || $_GET['company_id'] == "") { $values['company_id'] = 0; } else { $values['company_id'] = $_GET['company_id']; } $allowed = array('phone', 'name', 'domen', 'short_name', 'description', 'date_add', 'access_part'); $sql = "INSERT INTO crm_company SET " . pdoSet($allowed, $values, $values); $stm = $dbh->prepare($sql); $stm->execute($values); $new_company_id = mysql_insert_id(); $sqll = "INSERT INTO `crm_settings2` (`obj_type`, `obj_region`, `sms_debug`, `sms_meet_txt`, `sms_pass_txt`, `sms_object_send_txt`, `sms_base_add_txt`, `sms_extend_txt`, `sms_cli_add_txt`, `obj_subtype`, `obj_type_house`, `obj_source`, `sms_settings_id`, `company_id`) VALUES ('Комната,1-комнатная,2-комнатная,3-комнатная,Дом,КомнатаКП,1-комнатнаяКП,2-комнатнаяКП,3-комнатнаяКП,4-комнатнаяКП,ТанхаусКП,ДомКП', 'Ленинский,Центральный,Советский,Калининский,Курчатовский,Тракторозаводский,ЧМЗ,Парковый,Тополиная аллея,Залесье,Чурилово,Копейск', '0', '{name} у вас назначена встреча {meet} по адресу .. (вход со стороны магазина Равис)ваш персональный менеджер {manager-name} {manager-thirdname}', 'Ваш логин: {mobile}, Ваш пароль: {pass}. Компания Миг', '{addres} {phone} {name-holder}', 'Спасибо за сотрудничество, ваш объект добавлен в базу собственников, хороших вам жильцов.', 'Тестовая рассылка', '{name} спасибо за сотрудничество', 'Новостройка,Вторичное жильё,Элитное жильё,Загородное жильё,Коммерческое,Земельные участки', 'Кирпичный,Панельный,Блочный,Монолитный,Деревянный', 'Интернет,Авито,ДомЧел,74дом,Вывеска,Визитка,Рекомендации,Сайт,Тумба,Из рук в руки-сайт,Из рук в руки-газета,Вконтакте-группа,Вконтакте-реклама,Майл.ru,Фейсбук,E-mail,СМС', '56', '".$new_company_id."')"; $stmm = $dbh->prepare($sqll); $stmm->execute($values); echo $_GET['callback'] . '(' . "{'success' : '1'}" . ')';
Решение задачи: «Mysql_insert_id();»
textual
Листинг программы
DELIMITER // CREATE PROCEDURE OpenCounts(fio1 CHAR(50), adres1 CHAR(50), tel1 CHAR(20), data1 DATE, ntype1 INT, ost1 FLOAT(10,2), OUT nomer INT) BEGIN INSERT INTO Client (Fio, Adres, Tel) VALUES (fio1, adres1, tel1); SELECT LAST_INSERT_ID() INTO nomer; INSERT INTO Counts (Ncl, Ntype, DATA, ost) VALUES (nomer,ntype1,data1,ost1); END; // DELIMITER ;
Объяснение кода листинга программы
- Создание процедуры
OpenCounts
с семью параметрами: fio1, adres1, tel1, data1, ntype1, ost1 и OUT nomer. - Вставка записи в таблицу
Client
с помощью оператора INSERT INTO по полям Fio, Adres, Tel и получение идентификатора последней вставленной записи с помощью функции LAST_INSERT_ID(). - Вставка записи в таблицу
Counts
с помощью оператора INSERT INTO по полям Ncl, Ntype, DATA, ost и передача идентификатора последней вставленной записи из таблицыClient
в переменную nomer.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д