php - 在 PHP 中获取没有别名的 SQL 连接语句
问题描述
按照我的代码:
$list = $pdo->prepare("SELECT * FROM table_a INNER JOIN table_b ON table_a.id = table_b.blabla_id");
$list_result = $list->execute();
while($element = $list->fetch()) {
//CONTENT
}
现在我想用类似的东西来获取列echo $element['table_a.id'];
- 这是行不通的。我不想为每一列都写一个别名。有没有办法解决这个问题?:)
解决方案:
$list = $pdo->prepare("SELECT * FROM table_a INNER JOIN table_b ON table_a.id = table_b.blabla_id");
$list->execute();
while($element = $list->fetch(PDO::FETCH_ASSOC)) {
$a = [];
$i = 0;
foreach ( $element as $k => $v ) {
$meta = $list->getColumnMeta($i);
$a[ $meta['table'] . '.' . $k ] = $v;
$i++;
}
echo $a['table_b.blabla'];
}
正如 kmoser 所提到的,可以提高效率,因为没有必要在每个循环中检查列名,因为它们不会改变。
谢谢大家。
解决方案
$list->fetch()
通过将调用更改为 来修复调用后$list_result->fetch()
,您可以使用它$list_result->getColumnMeta($i)
来获取 position 列的元信息(包括表名)$i
,其中$i
是结果集中的 0 索引列。
然后,您可以遍历列,检索它们的表名,并使用更新的键和原始数组中的值填充新数组:
while($element = $list->fetch()) {
$a = []; // New array
$i = 0;
foreach ( $element as $k => $v ) { // For each element in the fetched row
$meta = $list_result->getColumnMeta($i); // Get the meta info for column $i
$a[ $meta->table . '.' . $k ] = $v; // E.g. $a[ 'table_a.id' ] = 'Foo'
$i++; // Point to next column
}
$element = $a; // If you really need this variable name
}
现在您可以使用$element[ 'table_a.id' ]
.
您可能希望通过仅循环一次元信息来使我的示例更有效,因为每列的表名不会因行而异。
有关更多信息,请参阅https://www.php.net/manual/en/pdostatement.getcolumnmeta.php。
推荐阅读
- create-react-app - 为什么在 ZEIT Now 上托管的 Create React App 不显示 404 响应?
- python - 在 Pandas 中检索数据
- coldfusion - 将客户端字符转换为服务器字符时出错?
- java - 知道为什么我在从 HashMap 中删除键时没有收到 java.util.ConcurrentModificationException 吗?
- javascript - ''router-outlet' 不是已知元素 - Angular
- heroku - Heroku 工作人员突然崩溃,日志没有显示我的任何脚本。发生了什么?
- c++ - g++ -I 和 -L 命令查找 .hpp 文件不起作用
- php - 部署 Symfony 4 应用程序时出现路由问题
- python - 使用 Python 逐行向 Excel 写入和设置样式
- docker - 将 SSH 密钥复制到容器的问题