使用Ubercart表中的MySQL提取Drupal编码数据

时间:2011-01-11 18:16:24

标签: sql mysql drupal ubercart

我正在编写Drupal / Ubercart与内部管理系统之间的集成部分。

客户使用具有属性的Ubercart产品(例如Plaque,其可以包含姓名,公司,注册日期和月份)。下订单时,为属性输入的值将写入uc_order_products,其中data字段包含用户输入的实际值。据我所知,这是唯一存储最终用户输入的产品属性值的地方。

编码的属性值使用在Drupal表中看到的格式来编码对象:

a:3:{s:10:"attributes";a:4:{s:26:"Name (to appear on plaque)";a:1:{i:0;s:10:"Some  
Namee";}s:7:"Company";a:1:{i:0;s:28:"Some Company Name Goes here_";}s:19:"Certification 
Month";a:1:{i:0;s:0:"";}s:18:"Certification Year";a:1:
{i:0;s:4:"2011";}}s:9:"shippable";s:1:"1";s:6:"module";s:10:"uc_product";}

并且扩展了,它看起来像这样:

a:3:
{
    s:10:"attributes";
    a:4:
        {
            s:26:"Name (to appear on plaque)";
            a:1:
                {
                    i:0;
                    s:10:"Some Namee";
                }
            s:7:"Company";
            a:1:
                {
                    i:0;
                    s:28:"Some Company Name Goes Herep";
                }
            s:19:"Certification Month";
            a:1:
                {
                    i:0;
                    s:0:"";
                }
            s:18:"Certification Year";
            a:1:
                {
                    i:0;
                    s:4:"2011";
                }
        }
    s:9:"shippable";
    s:1:"1";
    s:6:"module";
    s:10:"uc_product";
}

我有一种简单的方法可以使用SQL获取本文中的各个字段值吗?我可以编写一个SQL函数来查找具体内容,但我想知道是否有人知道现有的MySQL方法(可能在Drupal中)会这样做。

谢谢!

2 个答案:

答案 0 :(得分:2)

这是一个序列化数组,意味着在Drupal将其插入数据库之前由PHP's serialize() function处理的数据。使用opposite function unserialize()将该字符串转换回数组。

答案 1 :(得分:0)

不知道是否存在任何内置解决方案,但我最终编写了一个SQL函数,它将Name (to appear on plaque)作为参数文本。然后,该函数定位文本并提取后续的{ ... }块,并从中检索相应的字符串值。粗糙,但在这种情况下工作。

如果有人有更好的解决方案,我想听听它!