为字段分配名称 SQL

Assigning names to fields SQL

提问人:Derek Brazil 提问时间:9/24/2019 最后编辑:Derek Brazil 更新时间:9/24/2019 访问量:31

问:

我问了一个快速的问题,我一直在努力解决这个挑战(为了我自己的利益)。

如何在选择表中的所有列后设置字段的名称。

请参阅下面的代码片段

SELECT * 
FROM `random$table` 
LEFT JOIN users AS u AND u.username AS title ON u.rank > 4 
WHERE u.username = 'exploit' 
GROUP BY `id` LIMIT 1

正如您从上面的片段中看到的那样,我正在尝试在 LEFT JOIN 之后为字段分配一个给定的名称。

和 u.username 作为标题

我找不到与此问题相关的任何其他问题,如果有,请标记为重复。

旁注:查询易受攻击是有原因的

谢谢亲切的问候

php mysqli SQL注入

评论


答:

0赞 Anton 9/24/2019 #1

查询后无法执行此操作。而是在 SELECT 表达式中设置别名。也许你需要某种映射,以便根据你的$table值和 field=>alias 匹配的$array,你将其与 join(',', $array) 一起放入 SELECT 表达式中。

像这样的东西:

    function mapFields($table) {
        $mapping = [];


        switch($table) {
            case 'abc': {
                $mapping = [
                    $table.'.id' => 'id',
                    $table.'.rank' => 'rank',
                    $table.'.title' => 'title'
                ];
            }
            case 'xyz': {
                $mapping = [
                    $table.'.id' => 'userId',
                    $table.'.username' => 'username',
                    $table.'.email' => 'userEmail'
                ];
            }
        }

        return array_map(
            function($k, $v){return "$k as $v";}, 
            array_keys($mapping), 
            $mapping
        );
    }

    $mapping = mapFields('random'.$table);

    // do propper checks if the mapping array is empty or so


    $select = join(',', $mapping);



    SELECT $select
    FROM `random$table`

评论

0赞 Derek Brazil 9/24/2019
你能详细说明一下吗,也许添加一个代码片段,我不太明白你的答案。有关其他信息,请参阅下文。有效载荷 如果这有帮助1` LEFT JOIN users AS u AND u.username AS title ON u.rank > 4 WHERE u.username = 'exploit' GROUP BY `id
0赞 Derek Brazil 9/24/2019
我只能控制$table,无论如何都必须有SELECT *
0赞 Anton 9/24/2019
也许可以给你一些想法