2010-05-18 13 views
5

Wie überprüfen Sie, ob ein Spaltenwert null ist? Beispielcode:PHP PDO fetch null

$db = DBCxn::getCxn(); 

$sql = "SELECT exercise_id, author_id, submission, result, submission_time, total_rating_votes, total_rating_values 
FROM submissions 
LEFT OUTER JOIN submission_ratings ON submissions.exercise_id=submission_ratings.exercise_id 
WHERE id=:id"; 

$st = $db->prepare($sql); 

$st->bindParam(":id", $this->id, PDO::PARAM_INT); 

$st->execute(); 
$row = $st->fetch(); 

$this->total_rating_votes = $row['total_rating_votes']; 

if($this->total_rating_votes == null) // this doesn't seem to work even though there is no record in submission_ratings???? 
{ 
... 
} 
+2

Was bedeutet '$ row [ 'total_rating_votes'];' enthalten? –

+0

$ row ['total_rating_votes']; sollte NULL enthalten, da in der Tabelle submission_ratings keine Datensätze vorhanden sind. Ich habe dies überprüft, indem ich die Abfrage in mysqladmin ausgeführt habe. – Jacob

+0

Wenn keine Datensätze vorhanden sind, wird $ row ['total_rating_votes'] nicht gesetzt. Mach eine print_r ($ Zeile). Sie sollten den Rückgabewert von execute überprüfen, der die Anzahl der gefundenen Datensätze angibt. –

Antwort

0

Vielen Dank für Ihre Antworten. Nach ein wenig Experimentieren dieser Code mein Problem gelöst

$this->total_rating_votes = $row['total_rating_votes']; 

if(!isset($this->total_rating_votes)) // this is now true if this record had a NULL value in the DB!!! 
{ 
... 
} 
12

Wenn Sie mit der Datenbank verbinden, können Sie einige Attribute gesetzt zu kontrollieren, wie PDO Nulls und leere Strings behandelt, wenn sie von der Datenbankabfrage

zurückgegeben werden

PDO :: setAttribute (PDO: : ATTR_ORACLE_NULLS, $ option)

Wo $ Option eine der folgenden ist:

  • PDO :: NULL_NATURAL: Keine Konvertierung.
  • PDO :: NULL_EMPTY_STRING: Leeres Zeichen wird in NULL konvertiert.
  • PDO :: NULL_TO_STRING: NULL wird in eine leere Zeichenfolge konvertiert.
2

Ist es nicht so etwas, das Sie tun möchten?

foreach($row as $r){ 

if($r->total_rating_votes == null){ 

    //do something 

} 

Eigentlich könnten Sie versuchen wollen:

if($r->total_rating_votes == ""){/*do something*/} 

Da PHP den Nullwert in einen leeren String umgewandelt haben könnte, und es ist dann nicht wirklich null, ist es ""

Hope this hilft!