2009-10-19 13 views
9

tutaj jest opis zmienna mam echo z mojego tabeli:Jak sprawdzić, czy wpis mysql jest pusty w PhP?

$description = mysql_result($result,$i,"description"); 

czasami $ i'th rekordu jest pusta i nie ma żadnych danych w nim/nie opis.

Co chcę zrobić, to echo „Brak opisu” dla zapisów, które są puste

if (isset($description)){ echo "No description available";} 
else{ echo $desctipion;} 

Moja próba nie działa choć jak to wówczas echa Brak opisu dla każdego rekordu, nawet tych, które aren” t pusty.

Jaka jest odpowiedź?

Odpowiedz

25

isset($description) spowoduje prawdziwe, ponieważ opis $ jest nadal ustawiony, chociaż jego wartość jest „pusty”. To, czego potrzebujesz, to empty.

if (empty($description)) { 
    echo "No description available"; 
} else { 
    echo $description; 
} 
+0

Działa idealnie, wielkie dzięki. –

+0

Nigdy nie musisz używać Empty! – dynamic

+2

@ yes123: Czy mógłbyś to wyjaśnić? Nie potrzebujesz go na każdym koncie, ale dlaczego go nie używać? – Sk8erPeter

0

Użyj mysql_affected_rows funkcję:

$qtd = mysql_affected_rows($result); 
+1

To nie będzie różnicy, jeśli kolumna zawiera wartość NULL. –

+0

Przepraszam, źle przeczytałem pytanie. Twoja odpowiedź jest poprawna. +1 dla Ciebie :) – Cesar

2

To zależy od tego, co masz na myśli.

mysql_result zwraca FALSE w przypadku niepowodzenia, co może się zdarzyć, jeśli podasz nieprawidłowy (wiersz, pole). Aby to sprawdzić, użyj operatora tożsamości o numerze ===, który sprawdza zarówno wartość, jak i typ. Operator równości ==, funkcja empty() i warunkowa ocena instrukcji if sprawdzają wartość, ale nie typ.

Oznacza to, że za pomocą jednego z tych metod nie ma żadnej różnicy pomiędzy różnymi wartościami, które wszyscy równają się Boolean FALSE, jak pustych strun, pustych tablic, ciąg '0' i wartości NULL.

Więc jeśli chcesz być naprawdę pewny o tym można zrobić coś jak następuje:

if ($description === FALSE) { 
    throw new Exception("The row $i was out of range in query $query."); 
} else if ($description === NULL) { 
    // assuming that the description field has a default value of NULL 
    // * this one I'm not sure about.. the documentation for mysql_result claims 
    // that it returns a string, so this may never happen. 
    // It's left as an exercise for the reader. 
    throw new Exception("Uninitialized value in result row $i of db query $query"); 
} else if ($description === '') { 
    echo "No description available"; 
} else { 
    echo $description; 
} 

Since empty() zwrotów true pod podobnym zestawie warunków do równości (==) z FALSE, tym bardziej ścisłe sprawdzanie typu byłoby szczególnie ważne w przypadkach, w których wynik mógłby faktycznie być "0".

Najwyraźniej nie mogę publikować więcej niż jednego hiperłącza, więc nie mogłem połączyć się z dokumentacją dla operatorów porównania ("http://php.net/manual/en/language.operators.comparison.php") lub pustej funkcji ("http://php.net/empty"). Na szczęście ich bezpieczeństwo jest stosunkowo niedbałe. Mwuh Hah!