2013-09-02 3 views
7

Ich verwende das WPDB Objekt innerhalb von Wordpress um mit einer MySQL Datenbank zu kommunizieren. Meine Datenbank hat eine Spalte mit einem Typ bit(1), aber Wordpress extrahiert diese nicht als 0 oder 1 auf meinem Produktionsserver (sie taten auf meinem lokalen Rechner).Wordpress Datenbank Klasse - MySQL Typ Bit


Frage:

Wenn ich einen Datenbankwert von Wordpress haben, kann ich nicht einen einfachen Vergleich zu 0 tun oder 1:

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

Wie kann ich überprüfen, ob die Wert ist 0 von 1?


Hintergrund:

Dies war kein Problem auf meinem lokalen Rechner, sondern nur in der Produktion.

ich die Datenbank abfragen wie folgt aus:

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

Wenn ich einen var_dump() auf die Ergebnisse aus der Datenbank zu tun, hier ist der Ausgang des Browsers zeigt:

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" 
    } 
} 

Beachten Sie, wie Sold und Written zeige eine String-Größe von 1, aber keinen zugehörigen Wert. Diese Werte sollten mit 1 bzw. 0 ausgefüllt werden.

Der Chrome-Inspektor Tool zeigt etwas ganz interessant für diese Werte:

enter image description here

enter image description here

Was ist \u1 oder \u0 und warum sie nicht einfach 1 oder 0, so kann ich tun Vergleiche?

Vielen Dank für Ihre Zeit.

+0

Es klingt, als wären die Werte nicht in der mySQL-Datenbank festgelegt. Versuchen Sie, die Zeilen in mySQL zu aktualisieren. – fredrik

+0

@fredrik Ich hatte erwähnt: "Diese Werte sollten mit' 1' und '0' befüllt werden." –

+0

Gut '\ u1' und' \ u0' ist zufrieden, leider die Unicode-Darstellung von Steuerzeichen. Vielleicht könnten Sie versuchen, sie auf eine ganze Zahl zu übertragen. – feeela

Antwort

1

prüfen diese Antwort aus: „Wenn Sie Daten aus einer MySQL-Datenbank wählen PHP der Datentyp verwendet, wird in einen String immer umgewandelt werden“ https://stackoverflow.com/a/5323169/794897

Sie können entweder tun:

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

oder Typ umwandeln die Variable, z.B.

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

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

Für mich war die Lösung ord-Funktion: http://us1.php.net/manual/en/function.ord.php

bearbeiten

Doch scheint das Verhalten in Abhängigkeit von dem Server zu unterscheiden. Auf Arch Linux mit MariaDB 10.0.14 und Ubuntu mit MySQL 5.5.37-0ubuntu0.13.10.1 wpdb gibt gute alte "0" oder "1" Strings zurück, nicht die problematischen Bitstrings, die auf CentOS 6.4 MySQL 5.1 passieren .73