Часто программисты сталкиваются с такой задачей, как сохранять данные сразу в несколько баз данных MySQL, причем как правило такие базы связаны друг с другом по ID. Как правило идентификатор записи в MySQL определяется автоматически при помощи параметра поля «auto_increment» - это экономит время и ресурсы сервера. Этот параметр имеет свой счетчик в MySQL и по-этому для того что бы корректно записать данные в базу нужно его определить.
Когда я искал пути решения, часто в блогах предлагали использовать 2 метода:
1.
function mysql_autoid($id,$table) { $query = 'SELECT MAX('.$id.') AS last_id FROM '.$table; $result = mysql_query($query); $result = mysql_fetch_array($result); return ($result['last_id']+1); }
2.
обновлять значение самого автодиндекса.
Сразу скажу, оба метода неверные и имеют много минусов. 1 вариант имеет огромный недостаток, нельзя удалять элементы из базы данных, он просто перестает выдавать правильное значение. Второй метод я даже пробывать не стал, так как не видел смысла в нем!
Решением этой проблемы стал любимый сайт MySQL (http://dev.mysql.com/doc/refman/5.1-maria/en/mysql-insert-id.html), где я нашел эту чудесную функцию. Так же описание этой функции есть в мануалах самого php (http://ru2.php.net/manual/ru/function.mysql-insert-id.php).
mysql_insert_id() используется после mysql запроса, вот пример использования:
// – тут мы добавляем 1 запись в каталог, и сразу после запроса получаем $last_id, который будет равен ID записи которую мы только что сохранили. mysql_query("INSERT INTO `new_cat_subimg` (`id` ,`img`,`price`,`siteid`, `name`) VALUES (NULL , '{$name}', '{$price}', '{$site['id']}', '{$namesub}');"); $last_id=mysql_insert_id(); // и вот тут мы добавляем этот ID в другую запись mysql_query("INSERT INTO `new_cat_sub` (`id` ,`id_cat`, `text`, `array_id`, `default_img`,`param`,`siteid`,`name`,`sort`,`price`) VALUES (NULL , '{$cat}', '{$_POST['text']}', '{$last_id}', '0', '{$_POST['param']}', '{$_POST['siteid']}', '{$_POST['name']}', '{$sort}', '{$text2}');");Собственно работает хорошо и отлажено!
Немає коментарів:
Дописати коментар