مشكلة تخزين تجزئة في ديسيبل باستخدام قاطع :: nfreeze في بيرل

StackOverflow https://stackoverflow.com/questions/2653425

سؤال

أرغب في إدراج علامة تجزئة في DB باستخدام Stint :: nfreeze ولكن لا يتم إدراج البيانات بشكل صحيح.

قانون بلدي على النحو التالي:

%rec=();
$rec{'name'} = 'my name';
$rec{'address'} = 'my address';

my $order1 = new Order();
$order1->set_session(\%rec);
$self->createOrder($order1);

sub createOrder {
my $self  = $_[0];
my $order = $_[1];


# Retrieve the fields to insert into the database.
my $st = $dbh->prepare("insert into order (session,.......) values(?,........)");

my $session   = %{$order->get_session()};
$st->execute(&Storable::nfreeze(\%session),.....);
$st->finish();

}

sub getOrder
{
     ...

    my $session = &Storable::thaw( $ref->{'session'} );
    .....
}    

ال thaw يعمل بشكل جيد لأنني اختبرته مع بعض الصفوف التي تم إدخالها بشكل صحيح ، لكن عندما أحاول الحصول على صف تم إدخاله باستخدام createOrder روتين فرعي ، أحصل على خطأ يقول:

صورة ثنائية صاخبة V36.65 أكثر حداثة من أنا (v2.7) في blib/lib/stint.pm (autosplit في blib/lib/auto/stint/thaw.al) خط 415

يأتي الخطأ من الخط الذي يحتوي thaw. ال nfreeze لم يخزن التجزئة بشكل صحيح.

هل يمكن لأي شخص أن يوجهني إلى ما أفعله خطأ في createOrder روتين فرعي؟

أعرف أن إصدار الوحدة النمطية لا علاقة له بالمشكلة.

هل كانت مفيدة؟

المحلول

من المحتمل أن تكون مشكلتك غير لائق هنا:

my $session   = %{$order->get_session()};
$st->execute(&Storable::nfreeze(\%session),.....);

هذا يجب أن يصلحه:

my $session   = $order->get_session();
$st->execute(&Storable::nfreeze($session),.....);

حيث ->get_sessionإرجاع مرجع التجزئة ، عندما تخلطه في سياق العددية ، كان يتحول إلى سلسلة تحتوي على إحصائيات على التجزئة. التجزئة %session هو متغير الحزمة الفارغة %main::session الذي كنت قد اشتعلت إذا كنت تعمل مع use strict; use warnings;.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top