Ich habe PHP 5 Code, der auf eine MyISAM Tabelle auf MySQL 5 Server zugreift. Die Abfrage sieht wie folgt aus:MySQL gibt ein leeres Feld zurück: CONCAT (nonEmpty1, empty2, nonEmpty3) = NULL
SELECT CONCAT(fName1,' ',mName2,' ',lName3) AS userName
FROM users
WHERE level > 10
Wenn kein MNAME in, gefüllt ist I-Ausgang erwarte wie „fname lname“, aber ich bin immer „“ (leere Zeichenkette) statt (die Anzahl der zurückgegebenen Zeilen ist richtig). Wo mache ich einen Fehler?
PHP-Code:
<?php
$result = mysql_query($the_above_query);
while ($result_row = mysql_fetch_assoc($result)) {
// do stuff with the name
// except I'm getting empty strings in $result_row['userName']
}
relevanter Teil der Tabellenstruktur:
CREATE TABLE users {
/* -snip- */
`fName1` varchar(50) default NULL,
`mName2` varchar(50) default NULL,
`lName3` varchar(50) default NULL,
`level` int(11) default 0,
/* -snip- */
} ENGINE=MyISAM DEFAULT CHARSET=utf8;
(Auch ist auf diese Weise (Spalte Verkettung in MySQL) eine gute Idee, oder soll ich hole die Spalten PHP und ihnen dort beitreten?)
Stellt sich heraus, dass ich ein NULL zurückbekam; PHP behandelt eine zurückgegebene NULL und eine leere Zeichenfolge ("") in ähnlicher Weise, Sie müssten mit === vergleichen, um den Unterschied zu sehen.
Schöne Entdeckung auf 'CONCAT_WS()' – redolent