gpt4 book ai didi

php - LEFT JOIN 快捷方式在使用 OOP 和 PDO 时导致错误

转载 作者:行者123 更新时间:2023-11-29 00:18:21 25 4
gpt4 key购买 nike

这是我的代码:

Mysql表:

|编号 |姓名 |许可 |

用户

|编号 |姓名 |用户名 |组 |

$sql = 'SELECT * FROM `users` u LEFT JOIN `groups` g ON g.id = u.group WHERE u.name = ? OR u.id = ?;

因为我有相同名称的列,当我尝试在 php 中设置名称时,它会给我错误的数据(准确地说是来自组)

'ID'            => isset($user->data()->u.id) ? escape($user->data()->u.id) : NULL,
'NAME' => isset($user->data()->u.name) ? escape($user->data()->u.name) : NULL,
'USERNAME' => isset($user->data()->u.username) ? escape($user->data()->u.username) : NULL,

它给我错误: fatal error :无法在 C:\aaa\lang\en\common 中的表达式结果上使用 isset()(您可以使用“null !== expression”代替) .lang.php 第 9 行

我怎样才能以不干扰其他地方的对象的方式编写 SQL?

PS:我知道我可以重命名我的专栏,但这将花费我很长时间,我相信一定有更好的方法。

-谢谢

最佳答案

听起来您需要停止使用 SELECT *(IMO 始终是一个不错的选择)并在适当的地方使用列别名。例如……

SELECT u.id AS user_id, u.name AS user_name, u.username,
g.id AS group_id, g.name AS group_name -- and so on

至于您的错误消息,您正在使用连接运算符 (.)。这会导致无法在 isset() 中使用的表达式。使用上述别名并假设 $user->data() 通过 PDO::FETCH_OBJ 返回结果,您可以使用...

'ID' => isset($user->data()->user_id) ? escape($user->data()->user_id) : null,
// etc

如果您真的不想选择每一列,在适当的地方提供别名,我能想到的唯一其他选择是创建一个 View ,例如

CREATE VIEW users_and_groups AS
SELECT u.id AS user_id, u.name AS user_name, u.username,
g.id AS group_id, g.name AS group_name -- and any other columns you need
FROM users u
LEFT JOIN groups g ON g.id = u.`group`

然后您可以简单地SELECT * FROM users_and_groups

关于php - LEFT JOIN 快捷方式在使用 OOP 和 PDO 时导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22031798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com