Приветствую! приходит такой массив POST: Код (Text): array(3) { ["city"]=> string(1) "1" ["block"]=> array(2) { [0]=> string(1) "2" [1]=> string(1) "4" } ["streetN"]=> string(3) "ул.Ленина" } вот мой код: Код (Text): $cityID = $_POST['city']; $street = $_POST['streetN']; $query = "INSERT INTO `streets` VALUES(NULL, '$street', '$cityID' )"; foreach ($_POST['block'] as $values) { $query1 = "INSERT INTO `streets_blocks` VALUES (LAST_INSERT_ID(), '$values')"; } if (mysql_query($query) & mysql_query($query1)) { echo "успешно"; } else { echo "ошибка", mysql_error(); } ну первая таблица отлично, а во вторую добавляется только последнее значение: Код (Text): string(55) "INSERT INTO `streets` VALUES(NULL, 'ул.Ленина', '1' )" string(59) "INSERT INTO `streets_blocks` VALUES (LAST_INSERT_ID(), '4')" Подскажите, как это исправить, никак не пойму синтаксис
Код (Text): mysql_query($query1)){ этот код делается вне foreach, который, в данном варианте, перезаписывает переменную $query1 надо например так Код (Text): foreach ($_POST['block'] as $values) { $query1 = "INSERT INTO `streets_blocks` VALUES (LAST_INSERT_ID(), '$values')"; mysql_query($query1); } ну думаю разберётесь. и так же обратите внимание на использовании LAST_INSERT_ID, если вы будете юзать его в foreach тогда значение LAST_INSERT_ID будет меняться если в таблице есть инкремент-индекс поле, поэтому, как я понимаю, вам нужно после Код (Text): $query = "INSERT INTO `streets` VALUES(NULL, '$street', '$cityID' )"; дописать например Код (Text): $street_id=LAST_INSERT_ID(); и соотв. Код (Text): $query1 = "INSERT INTO `streets_blocks` VALUES (LAST_INSERT_ID(), '$values')"; поменять на Код (Text): $query1 = "INSERT INTO `streets_blocks` VALUES ($street_id, '$values')"; так же советую прочитать про массовый INSERT в одну таблицу. валидней делать всё одним запросом чем многими, если это возможно. массовый работает в десятки раз быстрее чем много мелких.
Большое спасибо, все стало понятно. Единственное, last_insert_id() - вроде sql функция? вообщем, если использовать Код (Text): $street_id=LAST_INSERT_ID(); то выскакивает ошибка Код (Text): Fatal error: Call to undefined function LAST_INSERT_ID Попробовал заменить на mysql_insert_id, тогда в ID'шники возвращается ноль. В чем здесь может быть загвоздка?
Код (Text): $sql= 'INSERT INTO streets (cityid,strname) VALUES ('.$_POST['cityid'].','.$_POST['strname'].')'; if (!mysql_query($sql)) { die('Error: ' . mysql_error()); } $street_id=mysql_insert_id(); При условии что в таблице streets есть какой_то_id (auto_increment) (без него не пробовал ) Стало интересно - проверил. Если в таблице нет PRIMARY KEY auto_increment - mysql_insert_id() возвращает 0. Помогает следующее надругательство над таблицей MYSQL: Код (Text): ALTER TABLE `test` ADD `id` INT(9) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
спасибо за ответы. В итоге вернулся к 'mysql_insert_id()'. Сам себя надурил, у меня 0 возвращался, потому что я mysql_query позже чем надо вставил ))