2011-08-12 11 views
0

私のデータベースのセルに値を挿入するスクリプトがあります。そのセルには合計4つの値が含まれます。これは次のようになります:0; 0; 0; 0(各 '0'は値を表します)1つのフィールドに複数の値を格納する

'0'の番号3の場所にサンプル値100を挿入するとどうなりますか? ; 0; 100;事前に0

おかげ

0:このように。配列と

$array = unserialize($string); 

アクセス/更新値とデシベルで再店舗

それとも場合:

+2

されている理由シリアル化されたデータをMySQLに挿入しますか? (つまり、なぜあなたは1つではなく4つの列を持っていますか?) – NullUserException

+0

競合状態は可能でしょうか? – webbiedave

+0

しばらくお待ちください。データを4つの列にまとめたり、補助的なテーブルを作成したりすることができます。それはより速くて簡単です。 –

答えて

1

は、DBから文字列を取得serialize()

$array = array(0,20,103,330); 
$string = serialize($array); // store this in db 

unserialize()に見えますフォーマット:

$string = '0;0;100;0'; // coming from db 
$array = explode(';' , $string); 
$array[2] = 100; 
$string = implode(';' , $array); 
+2

代わりに4つの列があり、DB内で直接更新を行うほうが簡単です。 –

+0

@Marcがあなたの最初の、そして最も重要な好みであると示唆しているもの。 –

+2

これは、ダクトテープで船体にパッチを当てるようなものです。ある時点で、あなたのところに戻ってきます。 – jondavidjohn

2

これはデータベース設計が正しくないため、データベース設計のfirst normal formが破損しています。

あなたのスキーマとデータアーキテクチャを再考することをお勧めします。

多分それらを個々の列に分割してください。

あなたのデータはあなたの列のパターンを繰り返し最小化するためにリレーショナルに設計する必要があります(上記のリンクを参照してください)

私はほとんどがより良い方法があることを保証することができます...

0
<?php 

    // original string of values seperated by colon 
    $string = "0;0;0;0"; 

    // create array of values by splitting at colons 
    $vals = preg_split('/;/', $string); 

    // modify the value of any elements in your array 
    $vals[2] = 100; 

    // glue your array of values together with semicolons at the joins 
    $string = implode(';',$vals); 

    // check the value has been changed coreectly 
    echo $string; 

?> 
+0

技術的には正解ですが、これはOPが選択を行い、次にいくつかの処理を行い、次に4列しか持たず、単純な更新を行う必要があることを意味します... 2つのスレッドが異なる列を一度に更新しようとすると彼らはお互いを上書きすることがあります。 –

関連する問題