2012-03-16 10 views
1

私はすべての近くのレストランのデータベースを保持するアプリケーションを持っています。 新しいエントリを追加するときに、レストランの画像をいくつか追加するオプションがあります。入力現在のID

問題: 別のレストランイメージを、mysqlの自動インクリメントIDに格納されているレストランidという名前の別々のフォルダにソートしたいと思います。ここの唯一の問題は、私はそのIDを事前に知っていないということです。

フォーム例:だから

text input - title 
text input - address 
text input - phone 
file input - image 
file input - image 

、私は今何をすべき?

私は最後のIDを取得し、テーブルをロックし、IDでフォルダを作成し、内部に画像を保存し、画像パスを含むmysqlデータベースに情報を格納し、テーブルのロックを解除します。

または

II。 mysqlデータベースへの画像パスを除くすべての情報を保存し、PHP mysql_insert_idを使用して、idで指定されたフォルダを作成し、内部に画像を保存し、mysqlデータベースへの画像パスを保存します。

または

IIIです。より良い解決策?

答えて

2

この種のことは、通常、オプションIIで行われます。データベース内に情報のメイン行を格納し、最後の挿入IDをmysql_insert_id()またはネイティブのMySQL LAST_INSERT_ID()関数で取得し、必要に応じて関連するテーブルに行を格納し、ファイルシステムデータを格納するイメージディレクトリを作成します。

データベースに保存するイメージパスが、メインレストランテーブルに戻って1対多の関係で別のテーブルに移動すると仮定すると、挿入する最後の挿入IDを知る必要があります。複数の操作でそれを行うことについて多くのことを心配しないでください。それはほとんどのRDBMSがLAST_INSERT_ID()のような機能を持っている理由です。

+0

ありがとうございました –

1

自動インクリメント列を使用している場合。 insert文の直後にlast_insert_id()関数を呼び出して、最後に挿入されたレコードのIDを取得することができます。あなたはそれ以外の値が誤ったかもしれない、同じトランザクション/接続内でこれを行うことをその重要

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

は、ドキュメントのため、このリンクを参照してください。

1

写真の整理にレストランのIDを使用する必要はありません。特に、あなたが説明するタイミングの問題があるためです。私は別の一意のIDを作成する - それをpicture_folder_idまたは何かと呼んで - それを使用して、写真のフォルダに名前を付ける。そのIDに一意性を強制する限り、衝突は発生せず、タイミングの問題やロックは発生しません。

関連する問題