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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д