web-dev-qa-db-ja.com

ユーザーテーブルのBlobデータを更新する方法

ユーザーテーブルに保存されているデータを更新しようとしています。

enter image description here

クエリを使用してこのフィールドデータを更新する方法を提案するか、他のアプローチに従う必要がありますか?

$old_user_id = 123;
$new_user_id = 456;

$account_old = user_load($old_user_id);
$account_new = user_load($new_user_id);

if ($account_old && $account_new && !empty($account_old->data['uc_stripe_customer_id'])) {
  user_save($account_new, array('data' => array('uc_stripe_customer_id' => $account_old->data['uc_stripe_customer_id'])));
}

ありがとう!

1
jas

これは良い方法だと思います。データの現在の内容に応じて、それを新しいデータとマージすることができます。それが重要でない場合は簡単に削除できます。

<?php

$old_user_id = 123;
$new_user_id = 456;

$account_old = user_load($old_user_id);
$account_new = user_load($new_user_id);

// Check to make sure accounts are loaded.
if (empty($account_old) == FALSE && empty($account_new) == FALSE) {

  // make sure account data is populated before trying to act on it.
  if(empty($account_old->data) == FALSE) {

    // unserialize the blob from the user object.
    $account_new_data = unserialize($account_old->data);

    // make sure the key exists. maybe other checks.
    if(array_key_exists('uc_stripe_customer_id', $account_new_data) == TRUE) {

        // merge any existing data with the new data.
        $account_new->data = array_merge($account_new, account_new_data);

        user_save($account_new);
    }
  }
}
0
Chad Payne

serialised PHP array です。

私の控えめな意見では、これをSQLで解析しようとするのはおかしいでしょう。

PHP to unserializeを使用して変更を加え、serializeを再度実行して、結果をデータベースに書き込みます。

1
Clive