2017-02-08 2 views
2

シリアライズについて習得し始めたばかりで、簡単な説明が見つからないような質問があります。データベースに既に存在するシリアライズされた文字列を追加する方法

は、私は一週間と呼ばれるテーブルを持っていた週の内側に私は私のデータベースに保存されているようにシリアライズされた食事IDの束を含む3列目と3列だったと言う:

INSERT INTO `week` (`week_id`, `meal_code`, `meal_id`) VALUES 
(1, 'week12016', 'a:6:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;}'); 

をしかし、その後、私は別のものを追加したいです既存の文字列にmeal_idが、私は次のよう

$food=array("7"); 
$sfood=serialize($food); 
を格納するためのPHPファイルで試してみました

(1, 'week12016','a:7:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;}') 

、読み込むので、他の列を更新しません

は、その後の週のテーブル内の既存のmeal_idsに

mysqli_query($conn,"UPDATE week 
      SET meal_id ('$sfood')");  
    //if entry into the database is successful, confirm with a alert popup and refresh the home page   
if(mysqli_affected_rows($conn) > 0){ 
    //header("location: admin.php"); 
header("refresh:0; url=admin.php"); 
    echo "<script type='text/javascript'>alert('Upload Successful!')</script>"; 
exit; 

を7を追加しようとしている。しかし、私は自分のデータベースを確認したときに、何も変わっていません。

私が間違っていることは、達成しようとしていることを実行することも可能ですか?

+3

'UPDATE week SET meal_id( '$ sfood ') 'あなたは、' WHERE'節なしでデータベース全体を更新しようとしていることに気づきます。エラーをチェックすると 'mysqli_error($ conn)'でここで助けになっていました。また、RTM https://dev.mysql.com/doc/refman/5.7/en/update.htmlの構文が間違っています。 –

+0

おそらく、列を取得し、シリアル化を解除し、データを追加し、再シリアル化し、次に '更新... WHERE'をお勧めします。それ以外の場合は、データを上書きするか無効にします。 – aynber

+0

さらに、アップデートに追加する場合は、 'CONCAT()'または 'CONCAT_WS()' https://dev.mysql.com/doc/refman/5.7/en/string-functionsのいずれかを使用する必要があります。 htmlの場合は、その質問についてです。 –

答えて

0

テーブルの行から列を読み取る必要があります。それをPHP変数にシリアル化してから、新しい変数を追加します。

その後、新しい配列をシリアル化し、それを使用して処理するため、このデータを不可能にするよう

// SELECT from table 
$s = 'a:7:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;}'; 

$d = unserialize($s); 

print_r($d); 

$d[] = 99; 
print_r($d); 

$s2 = serialize($d); 
echo $s2; 

// UPDATE table row 

結果、このようなデータを格納する

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 4 
    [4] => 5 
    [5] => 6 
    [6] => 7 
) 
Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 4 
    [4] => 5 
    [5] => 6 
    [6] => 7 
    [7] => 99 
) 
a:8:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;i:7;i:99;} 

は、推奨されません戻ってあなたのデータベースにそれを格納クエリ

+1

これがなぜ落とされたのかは分かりませんが、技術的には正しいです(少なくとも、データベースのシリアル化されたデータが正しい限り)。 – GordonM

+0

@GordonM私は、私の意見では、答えをDVingして誰かを怒らせてしまった。しかし、これが初めて起こるのではない。私は彼の答えをDV'dしたときにコメントを残すことの問題を推測する – RiggsFolly

関連する問題