Да, вы можете. Самый простой способ - использовать pdo, хотя есть как минимум несколько других расширений, способных на это.
Установите атрибут для объекта PDO , а не PDOStatment .
$PDO->setAttribute(PDO::ATTR_FETCH_TABLE_NAMES, true);
Вот и все. Затем вы получаете ключи ассоциативного массива, такие как $row['myTable.myColumn']
. Это работает, если вы тоже получаете объект (например, через PDO::FETCH_OBJECT
), так что будьте осторожны, потому что вам нужно получить доступ к таким свойствам, как $obj->{'myTable.myColumn'}
* В руководстве сказано, что атрибут PDO::ATTR_FETCH_TABLE_NAMES
поддерживается только некоторыми драйверами. Если вышеприведенное не работает, вместо этого может работать .
$pdoStatement->setFetchMode(PDO::FETCH_NUM);
$pdoStatement->execute();
//build our associative array keys
$qualifiedColumnNames = array();
for ($i = 0; $i < $pdoStatement->columnCount(); $i++) {
$columnMeta = $pdoStatement->getColumnMeta($i);
$qualifiedColumnNames[] = "$columnMeta[table].$columnMeta[name]";
}
//fetch results and combine with keys
while ($row = $pdoStatement->fetch()) {
$qualifiedRow = array_combine($qualifiedColumnNames, $row);
print_r($qualifiedRow);
}
Тот же базовый шаблон используется для других расширений базы данных
$res = mysql_query($sql);
//build our associative array keys
$qualifiedColumnNames = array();
for ($i = 0; $i < mysql_num_fields($res); $i++) {
$columnMeta = mysql_fetch_field($res, $i);
$qualifiedColumnNames[] = "$columnMeta[table].$columnMeta[name]";
}
//fetch results and combine with keys
while ($row = mysql_fetch_row($res)) {
$qualifiedRow = array_combine($qualifiedColumnNames, $row);
print_r($qualifiedRow);
}
$res = $mysqli->query($sql);
//build our associative array keys
$qualifiedColumnNames = array();
foreach ($res->fetch_fields() as $columnMeta) {
$qualifiedColumnNames[] = "{$columnMeta->table}.{$columnMeta->name}";
}
//fetch results and combine with keys
while ($row = $res->fetch_row()) {
$qualifiedRow = array_combine($qualifiedColumnNames, $row);
print_r($qualifiedRow);
}
Это также должно работать с псевдонимами таблиц (проверено в php 7.1) - в квалифицированном имени столбца будет использоваться псевдоним таблицы.