PHP Boole konular

4 Cevap php

Ben php bool değerlerden oluşan ilgili bir sorum var. Ben bir boolean dönen bir saklı mysql proc var. Bu değer php tarafında yakaladı olduğunda bu 0 veya 1. Bu, tüm iyi gibi geliyor bana ve ben php php kılavuzda okudum yorumlayacak bir derleme zamanında 0 veya 1 olarak yanlış ya da doğru, ancak olarak değerini görüntüler Bu benim için durum böyle görünmüyor. Ben bir adım daha ileri gitti ve (bool) ile benim döndürülen değeri döküm ama bu hala çalışmak için görünmüyor var.

Benim ifadeleri düzgün bu nedenle ateş değilse. Herkes neler olduğunu biliyor mu? Yardımlarınız için teşekkürler.

4 Cevap

MySQL uygun BOOL veya BOOLEAN veri türleri yoktur. Onlar TINYINT(1) için eş anlamlı olarak ilan edilir. PHP Eğer dizeleri '0' ve '1' var bu yüzden prosedürü, PHP-dışı zeminde varlık PHP kara bir dizeye dönüştürülmüş olsun, hangi 0 veya 1 dönecektir.

Bu boolean döküm uygun booleans onları dönüştürmek olmamasıdır ancak garip. Siz kodunuzu diğer bazı hataları olabilir.

Eğer sorgudan sonucunu doğrudan döküm çalışıyorsun? Bu bir olasılıkla bir dizidir çünkü:

var_dump((bool) array('0')); // true

Belki de bu senin sorunun. Döndürülen sonucu kontrol edin.

Boolean değer bir dize olarak iade ediliyor gibi geliyor.

Böyle bir şey deneyin:

$your_bool = $field_value === "0" ? false : true;

Aşağıdaki komut dosyası kullanarak. (Sen çıkış benim örnekteki gibi görünmesi için sol tırnak içinde kelime "Boole" önce HTML satır sonu etiketleri eklemek gerekir, ben ne zaman, Firefox biçim garip bakmak yapmak, onları yorumlayan).

Sen ikinci satır MySQL 0 veya 1'den farklı bir şey olarak görür, bir null değeri ürettiğini görürsünüz; tinyint için doğru PHP gerçek değerini saklayan ama null değer TINYINT için bir anlamı yoktur beri yanlış PHP için hiçbir şey.

Hat dört gösterileri (int) ile döküm tipi PHP doğru ve yanlış hem MySQL TINYINT Boole alanları için saklanır sigortalamak için bir yoldur. PHP değişkenleri içine MySQL çıkan tamsayıları alınıyor PHP Boole değişkenlerine atanan zaman tamsayılar örtülü dökme beri çalışıyor.

echo "Boolean true=".true;
echo "Boolean false=".false;
echo "Boolean (int)true=".(int)true;
echo "Boolean (int)false=".(int)false;

İşte MySQL 5.1.41 için PHP 5.3.1 dan çıkış bulunuyor:

Boolean true=1
Boolean false=
Boolean (int)true=1
Boolean (int)false=0

Oh! Ve PHP Boole değişmezleri ile aynı sonucu tüm küçük veya büyük olabilir ... kendiniz deneyin.

Ben türünden emin değilim her şey için bir yardımcı işlev "to_bool" kullanın:

function to_bool($value, $default = false)
{
    if (is_bool($value)) {
        return $value;
    }
    if (!is_scalar($value)) {
        return $default;
    }
    $value = strtolower($value);
    if (strpos(";1;t;y;yes;on;enabled;true;", ";$value;") !== false) {
        return true;
    }
    if (strpos(";0;f;n;no;off;disabled;false;null;;", ";$value;") !== false) {
        return false;
    }
    return $default;
}

Daha sonra:

if (to_bool($row['result'])) { ... }