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.