diff --git a/dblayeroo.php b/dblayeroo.php index fdf88cf..4490830 100644 --- a/dblayeroo.php +++ b/dblayeroo.php @@ -3235,7 +3235,7 @@ class dblayeroo // name to the value by index. // FETCH_ASSOC doesn't work in empty left join (return NULL instead of // the filled value) - $fieldsAll = $this->fieldsAll (false); + $fieldsAll = $this->fieldsAll (true); // If the displayed fields are all in the same table, remove the table // name in the columns $cleanable = true; @@ -3252,18 +3252,22 @@ class dblayeroo break; } } + $columns = array_values ($this->displayGet (true)); + // Get the columns names that will be displayed to user. + // If the cleanable is possible, remove the table names + $columnNames = array_combine ($columns, $columns); //if ($this->joinObject === null && count ($this->displayGet (false))) if ($cleanable) { - // Force the fields to local ones as there is no use of external fields - $fieldsAll = $this->fields; // Remove the table name as there is no collisions risk // In case of Alias, remove the $this->sep too - $columns = array (); - foreach ($this->displayGet (false) as $col) + foreach ($columnNames as $key => $col) { - $col = str_replace ($this->sep.$this->tableprefix.$this->table. - $this->sep.".", "", $col); + // Remove the table and the separator if exists + $col = preg_replace ("#".$this->sep."[^".$this->sep."]+". + $this->sep."\.#U", "", $col); + // Remove the separator if not table exists + $col = str_replace ($this->sep, "", $col); if ($col[0] === $this->sep) $col = substr ($col, 1); elseif (strpos ($col, "DISTINCT ".$this->sep) === 0) @@ -3279,14 +3283,16 @@ class dblayeroo $col = substr ($col, 0, strpos ($col, " AS ".$this->sep) -1). substr ($col, strpos ($col, " AS ".$this->sep)); } - $columns[] = $col; + $columnNames[$key] = $col; } } else { - $columns = $this->displayGet (true); + foreach ($columnNames as $key => $col) + { + $columnNames[$key] = str_replace ($this->sep, "", $col); + } } - $columns = array_values ($columns); foreach ($result as $rownb=>$row) { foreach ($row as $colNb=>$val) @@ -3308,6 +3314,9 @@ class dblayeroo if ($pos) $name = substr ($columns[$colNb], 0, $pos); $name = str_replace ("DISTINCT ", "", $name); + /*if ($cleanable) + $name = str_replace ($this->sep.$this->tableprefix.$this->table. + $this->sep.".", "", $name);*/ if (strtolower ($fieldsAll[$name][0]) === "integer" && $val !== null) $val = intval ($val); @@ -3318,7 +3327,7 @@ class dblayeroo $colName = substr ($columns[$colNb], $pos, -1); } else - $colName = str_replace ($this->sep, "", $columns[$colNb]); + $colName = $columnNames[$columns[$colNb]]; $result[$rownb][$colName] = $val; unset ($result[$rownb][$colNb]); }