#php #mysql #sql
#php #mysql #sql
Вопрос:
Привет, у меня есть запрос, который вставит в таблицу новые данные, и я хочу, чтобы в то же время обновлялась внешняя таблица с идентификатором новых данных, которые я ввел. например:
mysql_query("INSERT INTO `test` (`name`) VALUES ('Mark')");
$query = mysql_query("SELECT `id` FROM `test` WHERE `name` = 'Mark'");
$id = mysql_result($query,0);
mysql_quey("UPDATE `test2` SET `test_id` = $id WHERE `name` = 'Mark'");
Как мне сделать это одновременно? потому что, делая это таким образом, я только вставляю новые данные и не обновляю другие.
Отбрасывает.
Комментарии:
1. Примечание: удалите обратные метки в ваших значениях и замените кавычками.
2. Попробуйте найти оператор MERGE .
3.
insert
запросы могут быть нацелены только на одну таблицу. вам нужно будет запустить несколько отдельных запросов или использовать триггер.4. Похоже, что мой комментарий теперь НЕДЕЙСТВИТЕЛЕН; судя по чьему-то редактированию. Было ли это действительным? Это была ошибка? Кто знает. Нам не разрешено изменять код, но исправлять отступы и текстовые опечатки.
5. @Fred-ii- это будет работать, если я это сделаю?
Ответ №1:
Попробуйте это :
mysql_query("INSERT INTO `test` (`name`) VALUES ('Mark')");
$id = mysql_insert_id();
mysql_quey("UPDATE `test2` SET `test_id` = $id WHERE `name` = 'Mark'");
Я изменил обратные кавычки на одинарные кавычки в вашей первой вставке для значений, обратные кавычки никогда не должны использоваться для значений полей.
Также я изменил его, чтобы использовать только два запроса, mysql_insert_id() получит последний вставленный идентификатор без необходимости запрашивать его.
Ссылка: http://www.php.net/manual/en/function.mysql-insert-id.php
Комментарии:
1. Проголосовал, так как вы исправили проблему с обратными ссылками, из-за которой было сделано недопустимое редактирование, которое, возможно, способствовало проблеме OP. Кроме того, предоставляя OP решение.
Ответ №2:
Прежде всего, вам не нужен select для получения идентификатора, mysql_insert_id()
для этого есть.
Затем вам нужно использовать транзакцию, чтобы оба запроса выполнялись одновременно:
mysql_query('BEGIN');
mysql_query("INSERT INTO `test` (`name`) VALUES ('Mark')");
$id = mysql_insert_id();
mysql_query("UPDATE `test2` SET `test_id` = $id WHERE `name` = 'Mark'");
mysql_query('COMMIT');
Транзакция гарантирует, что оба оператора выполняются, и никакой другой скрипт не может каким-либо образом встать между ними.
Комментарии:
1. 1, я не понимаю, почему кто-то голосует за вас, потому что ваш ответ — единственное хорошее решение! Транзакции необходимы, когда необходимо выполнить несколько взаимозависимых запросов…