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 ;

Объяснение кода листинга программы

  1. Создание процедуры OpenCounts с семью параметрами: fio1, adres1, tel1, data1, ntype1, ost1 и OUT nomer.
  2. Вставка записи в таблицу Client с помощью оператора INSERT INTO по полям Fio, Adres, Tel и получение идентификатора последней вставленной записи с помощью функции LAST_INSERT_ID().
  3. Вставка записи в таблицу Counts с помощью оператора INSERT INTO по полям Ncl, Ntype, DATA, ost и передача идентификатора последней вставленной записи из таблицы Client в переменную nomer.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5