Проблема с PHP / MySQL Insert - PullRequest
       13

Проблема с PHP / MySQL Insert

0 голосов
/ 19 сентября 2011

Как вставить данные в две или более таблицы?

В настоящее время я использую этот трюк. (Давайте просто предположим, что синтаксис правильный)

$Sql1 = "insert into user";
$Sql2 = "insert into files";
$Sql3 = "insert into messages";

query $Sql1
query $$ql2
query $Sql3

Так что я использую это, и мне нужно оптимизировать.

Кроме того, я думаю, что мне нужно использовать внешний ключ? Но я не знаю, как это сделать на phpmyadmin.

и, наконец,

Это все, что я хочу.

Для вставки данных в таблицу «user», а затем автоматически в таблицу «messages» и «files» будет также иметь идентификатор, который совпадает с идентификатором пользователя. Вот почему я использую 3 запроса в своем коде.

Пожалуйста, помогите мне.

Спасибо в ADVANCE!

Myb

Ответы [ 3 ]

3 голосов
/ 19 сентября 2011

Идеально использовать несколько запросов.

Однако вы должны заключить 3 запроса в одну транзакцию .То есть, если один запрос завершается неудачно по по какой-то причине , эффекты всех предыдущих запросов (если таковые имеются) можно откатить, чтобы ваша база данных оставалась в согласованном состоянии.

Примечание: транзакции невозможны с таблицами MyISAM MySQL.Кроме того, вы должны использовать PHP Mysqli (или PDO ), чтобы иметь возможность использовать транзакции.(Я предполагаю, что вы не используете какой-либо уровень абстракции высокоуровневой базы данных.)

Что касается вашего вопроса относительно внешних ключей : Насколько я знаю, нет никакой разницы, когда вы используете движок MyISAM для таблиц в вашей базе данных (что я предполагаю), потому что MyISAM даже не поддерживает явное моделирование внешних ключей.Однако другие движки таблиц, такие как InnoDB, могут использовать внешние ключи для проверки определенных ограничений, таких как «сообщение всегда должно быть связано с существующим человеком».

Вот несколько хороших примеров, касающихся внешних ключей: http://www.postgresql.org/files/documentation/books/aw_pgsql/node131.html

1 голос
/ 19 сентября 2011

С mysql вы можете использовать функцию LAST_INSERT_ID () или функцию php mysql_insert_id (). Оформить заказ данной записи:

http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

http://php.net/manual/en/function.mysql-insert-id.php

1 голос
/ 19 сентября 2011
...