Mysql_insert_id();

Узнай цену своей работы

Формулировка задачи:

Есть код, отправляем данные в бд в одну таблицу далее нам нужно сразу отправить другие данные во вторую таблицу, но из первой таблицы нам нужно узнать ID которое AUTO_INCREMENT чтобы вставить это значение во вторую таблицу, пробовал и mysql_insert_id(); и last_insert_id(); и через запрос, ничего не помогает, вторая запись даже не записывается, только если ставлю mysql_insert_id(); то запись идет во вторую таблицу но айди пишется не тот который нужен. mysql_insert_id(); постоянно ноль пишет. Кто что подскажет как айди получить? Вот код
Листинг программы
  1. $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
  2. $opt = array(
  3. PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  4. PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
  5. );
  6. try {
  7. $dbh = new PDO($dsn, $user, $password, $opt);
  8. } catch (PDOException $e) {
  9. die('Подключение не удалось: ' . $e->getMessage());
  10. }
  11. function pdoSet($allowed, &$values, $source = array()) {
  12. $set = '';
  13. $values = array();
  14. if (!$source) $source = &$_POST;
  15. foreach ($allowed as $field) {
  16. if (isset($source[$field])) {
  17. $set.="`".str_replace("`","``",$field)."`". "=:$field, ";
  18. $values[$field] = $source[$field];
  19. }
  20. }
  21. return substr($set, 0, -2);
  22. }
  23. //file_put_contents('log123.txt', print_r($_GET, 1), FILE_APPEND);
  24. if (isset($_GET['phone']) && !empty($_GET['phone'])) {
  25. $values = array();
  26. $values['phone'] = str_replace('+', '', $_GET['phone']);
  27. $values['phone'] = str_replace('(', '', $values['phone']);
  28. $values['phone'] = str_replace(')', '', $values['phone']);
  29. $values['phone'] = str_replace(' ', '', $values['phone']);
  30. $values['phone'] = str_replace('-', '', $values['phone']);
  31. $values['name'] = $_GET['name'];
  32. $values['domen'] = time();
  33. if (!isset($_GET['short_name']) || $_GET['short_name'] == "") {
  34. $values['short_name'] = 'Online';
  35. } else {
  36. $values['short_name'] = $_GET['short_name'];
  37. }
  38. $values['description'] = 'Заявка на кредит';
  39. $values['date_add'] = time();
  40. $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]}';
  41. if (!isset($_GET['company_id']) || $_GET['company_id'] == "") {
  42. $values['company_id'] = 0;
  43. } else {
  44. $values['company_id'] = $_GET['company_id'];
  45. }
  46. $allowed = array('phone', 'name', 'domen', 'short_name', 'description', 'date_add', 'access_part');
  47. $sql = "INSERT INTO crm_company SET " . pdoSet($allowed, $values, $values);
  48. $stm = $dbh->prepare($sql);
  49. $stm->execute($values);
  50. $new_company_id = mysql_insert_id();
  51.  
  52. $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`,
  53. `sms_extend_txt`, `sms_cli_add_txt`, `obj_subtype`, `obj_type_house`, `obj_source`, `sms_settings_id`, `company_id`) VALUES
  54. ('Комната,1-комнатная,2-комнатная,3-комнатная,Дом,КомнатаКП,1-комнатнаяКП,2-комнатнаяКП,3-комнатнаяКП,4-комнатнаяКП,ТанхаусКП,ДомКП',
  55. 'Ленинский,Центральный,Советский,Калининский,Курчатовский,Тракторозаводский,ЧМЗ,Парковый,Тополиная аллея,Залесье,Чурилово,Копейск',
  56. '0', '{name} у вас назначена встреча {meet} по адресу .. (вход со стороны магазина Равис)ваш персональный менеджер {manager-name} {manager-thirdname}',
  57. 'Ваш логин: {mobile}, Ваш пароль: {pass}. Компания Миг', '{addres} {phone} {name-holder}',
  58. 'Спасибо за сотрудничество, ваш объект добавлен в базу собственников, хороших вам жильцов.', 'Тестовая рассылка', '{name} спасибо за сотрудничество',
  59. 'Новостройка,Вторичное жильё,Элитное жильё,Загородное жильё,Коммерческое,Земельные участки', 'Кирпичный,Панельный,Блочный,Монолитный,Деревянный',
  60. 'Интернет,Авито,ДомЧел,74дом,Вывеска,Визитка,Рекомендации,Сайт,Тумба,Из рук в руки-сайт,Из рук в руки-газета,Вконтакте-группа,Вконтакте-реклама,Майл.ru,Фейсбук,E-mail,СМС',
  61. '56', '".$new_company_id."')";
  62. $stmm = $dbh->prepare($sqll);
  63. $stmm->execute($values);
  64. echo $_GET['callback'] . '(' . "{'success' : '1'}" . ')';

Решение задачи: «Mysql_insert_id();»

textual
Листинг программы
  1. DELIMITER //
  2. CREATE PROCEDURE OpenCounts(fio1 CHAR(50),
  3. adres1 CHAR(50),
  4. tel1 CHAR(20),
  5. data1 DATE,
  6. ntype1 INT,
  7. ost1 FLOAT(10,2),
  8. OUT nomer INT)
  9. BEGIN
  10. INSERT INTO Client (Fio, Adres, Tel) VALUES (fio1, adres1, tel1);
  11. SELECT LAST_INSERT_ID() INTO nomer;
  12. INSERT INTO Counts (Ncl, Ntype, DATA, ost) VALUES
  13. (nomer,ntype1,data1,ost1);
  14. END;
  15. //
  16. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут