2013-09-02 1 views
7

Używam obiektu WPDB wewnątrz Wordpress do komunikacji z bazą danych MySQL. Moja baza danych ma kolumnę z typem bit(1), jednak Wordpress nie wyodrębnia ich jako 0 lub 1 na moim serwerze produkcyjnym (zrobili to na moim lokalnym komputerze).Klasa bazy danych Wordpress - Bit MySQL


Pytanie:

Jeśli mam wartość bazy danych z Wordpress, nie mogę zrobić prostego porównania do 0 lub 1:

if ($data[0]->Sold == 1) { //Always false 
... 
if ($data[0]->Sold == 0) { //Always false 

Jak mogę sprawdzić, czy wartość to 0 z 1?


Tło:

To nie był problem na moim komputerze lokalnym, ale tylko w produkcji.

kwerendy bazy danych tak:

$data = $wpdb->get_results("..."); 

Kiedy robię var_dump() na wyniki z bazy danych, tutaj jest wyjście moja przeglądarka pokazuje:

array(1) { 
    [0] => object(stdClass)#261 (10) { 
    ["SaleID"]  => string(4) "1561" 
    ["BookID"]  => string(2) "45" 
    ["MerchantID"] => string(1) "1" 
    ["Upload"]  => string(19) "2012-11-20 15:46:15" 
    ["Sold"]  => string(1) "" 
    ["Price"]  => string(1) "5" 
    ["Condition"] => string(1) "5" 
    ["Written"] => string(1) "" 
    ["Comments"] => string(179) "<p>I am the first owner of this barely used book. There aren't any signs of normal wear and tear, not even any creases on the cover or any of its pages. It would pass for new.</p>" 
    ["Expiring"] => string(19) "2013-05-20 15:46:15" 
    } 
} 

Wskazówki jak Sold i Written pokaż ciąg o rozmiarze 1, ale nie ma powiązanej wartości. Te wartości powinny być wypełnione odpowiednio 1 i 0.

Chrome narzędzie Inspektor pokazuje coś całkiem interesujący dla tych wartości:

enter image description here

enter image description here

Co jest \u1 lub \u0 i dlaczego nie są one po prostu 1 lub 0, więc mogę zrobić porównania?

Dziękuję za poświęcony czas.

+0

Wygląda na to, że wartości nie są ustawione w bazie danych mySQL. Spróbuj zaktualizować wiersze w mySQL. – fredrik

+0

@fredrik Wspomniałem: "Te wartości powinny być wypełnione odpowiednio" 1 "i" 0 "." –

+0

Dobrze '\ u1' i' \ u0' jest treścią, niestety reprezentacją znaków sterujących w unicode. Być może mógłbyś spróbować rzucić je do liczby całkowitej. – feeela

Odpowiedz

1

Sprawdź tę odpowiedź out „Po wybraniu danych z bazy danych MySQL za pomocą PHP typ danych zawsze będzie przekształcony w ciąg” https://stackoverflow.com/a/5323169/794897

Można zrobić:

if ($data[0]->Sold === "1") { 
... 
if ($data[0]->Sold === "0") { 

lub typu cast zmienną, na przykład

$Sold = (int) $data[0]->Sold; 

if ($Sold === 1) { 
... 
if ($Sold === 0) { 
0

Dla mnie rozwiązaniem było użycie funkcji ord: http://us1.php.net/manual/en/function.ord.php

Edycja

Jednak zachowanie wydaje się różnić w zależności od serwera. On Arch Linux z MariaDB 10.0.14 i Ubuntu z MySQL 5.5.37-0ubuntu0.13.10.1 wpdb zwraca stare, dobre ciągi "0" lub "1", a nie problematyczne ciągi bitów, które występują w CentOS 6.4 MySQL 5.1 .73