كيف يمكنني طباعة "Null" حرفي للقيم غير المحددة في بيرل؟

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

  •  05-09-2019
  •  | 
  •  

سؤال

أقوم بتشغيل استعلام "وصف الجدول" وعدم إرجاع قيمة "Null" لعمود "الافتراضي". ومع ذلك، عندما أحاول طباعة القيمة من قاعدة البيانات إلى جدول HTML، فإنه لا يقوم بطباعة "Null". انها مجرد فارغة دائما.

هذه هي الطريقة التي أقوم بتخزين البيانات من قاعدة البيانات:

@nulls = ();

while (($null) = $sth1->fetchrow_array)
    {
    push (@nulls, $null);
    }

عندما أطبع محتويات الصفيف @nulls لا يطبع أبدا القيمة الحرفية ل "null". انها دائما فارغة. هل هناك طريقة للتغلب على هذه المشكلة؟

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

المحلول

كما قال كريس J، يتم إرجاع القيم الخالية كقيم غير محددة.

إذا كان لديك تحذيرات تم تمكينها، فستتلقى تحذير "قيمة غير محددة في الطباعة" عند طبع القيم. باستخدام strict و warnings Pragmata يمكن أن يوفر الكثير من الوقت تصحيح الأخطاء. ال diagnostics ويضيف براغما نص توضيحي إضافي للتحذيرات القياسية والأخطاء القاتلة.

من السهل جدا استرداد القيم الفارغة كما تأتي من قاعدة البيانات:

use strict;
use warnings;

my @nulls = ();
while ((my $null) = $sth1->fetchrow_array)
    {
            # before perl 5.10: use the ternary operator.
            push @nulls, defined $null ? $null : 'NULL';

            # perl 5.10 adds the defined-or operator: //
            push @nulls, $null // 'NULL';
    }

أو يمكنك بناء الخاص بك @nulls قم بتجميع نفس الطريقة التي تظهر بها أعلاه، ثم قم بتغيير Nulls في وقت العرض.

my @pre_5_10  = map { defined $_ ? $_ : 'NULL' } @nulls;
my @perl_5_10 = map { $_ // 'NULL' } @nulls;

نصائح أخرى

من http://metacpan.org/pod/dbi. ، سيعود قيم فارغة ك "UNDEF".

أنا لا أفعل بيرل، ولكن في كل لغة أخرى استخدمتها، عليك اختبار القيمة للاغتة. إذا كانت فارغة، فقم بطباعة السلسلة الحرفية "NULL".

أنت لا تقول ما قاعدة البيانات التي تستخدمها، ولكن يمكنك القيام بذلك على مستوى SQL إذا كنت لا تمانع في حل غير محمول، على سبيل المثال، في Oracle:

select NVL(some_column, 'NULL')
from some_table
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top