2011-09-16 5 views
3

IDはINSERTの直後にmysql_insert_id()で取得できます。 ID-image_name.jpgの形式でイメージを保存し、Image_Nameという名前の列に保存したいと考えています。今後のIDで画像を保存するにはどうすればよいですか?または、INSERT処理後に画像ファイルを保存する方が良いでしょうか?INSERTの前にmysql行のIDを取得する方法

+3

これを保存すると、次のIDが100%確実であるかどうかを知ることができません。 –

+0

イメージのファイル名にIDを含める特別な理由はありますか?私はすべての着信ファイルに対してランダムなファイル名を作成し、そのファイル名をデータベースレコードに保存します。 –

答えて

5

はい、INSERTの後に画像を保存する方が良いです。ファイルの保存に失敗した場合は、INSERTを元に戻す(DELETEを使用するか、トランザクションをロールバックする)必要があります。標準の命名方式を使用している場合は、テーブルにファイル名を設定するためにデータベースに再度触れる必要はありません(テーブルにファイル名を入れる必要がないため)。

+1

+1の最初の場所でテーブルのファイル名の必要はありません –

+0

それはなぜですか?説明していただけますか? – srivani

+0

@srivani: '/ some/path/image- $ id。$ ext'のようなイメージを常に呼び出す場合、データベースにファイル名は必要ありません。ピースを一緒に貼り付ける機能が必要です。あなたはデータベースのMIMEタイプが必要になります。それはあなたに拡張子を与えます。ボーナスは、ファイルシステムを再編成する場合、データベースを修正する必要がないということです。 –

6

INSERT処理後に保存するのが最も簡単な方法です。

mysql_query("INSERT INTO....."); // etc. etc. 
$id = mysql_insert_id(); 
mysql_query("UPDATE table SET image = '$image_name' WHERE id = '$id'"); 
0

イメージを20文字のランダムな文字列などの一時的な一意の名前で保存し、挿入が完了したら名前を変更できます。

0

他にも述べたように、INSERTの前に確実にIDを取得することはできません。

画像のファイル名が行IDと一致する必要がある場合は、muの提案(トランザクションでのINSERT、ファイルの保存、行の更新、トランザクションのコミット)を続けます。

別の方法(ファイル名に一致するidの要件がない場合)は、uniqid()を使用してファイルに名前を付けることです。これにより、ファイルを保存し、単一のクエリで行をINSERTし、トランザクションを開いたままにすることができます。

関連する問題