PHP PDO SQL Соедините две строки вместе - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь объединить две строки в оператор подготовки (имя таблицы и столбец динамический), но я получаю

Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'exp.$getSkill' in 'field list'

Мой код:

$query = $db->prepare('SELECT members.*, exp.*, lvl.*, exp.$getSkill AS exp_skill, lvl.$getSkill AS level_skill FROM members INNER JOIN exp ON members.id = exp.member_id INNER JOIN lvl ON members.id = lvl.member_id ORDER BY lvl.$getSkill DESC, exp.$getSkill DESC');   
            $query->execute();
            $row = $query->fetch();

Есть ли способ, которым я могу присоединиться к exp.и $ getSkill правильно?

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Попробуйте что-то вроде этого:

$query = 'SELECT members.*, 
                 exp.*,            
                 lvl.*, 
                 exp.'.$getSkill.' AS exp_skill, 
                 lvl.$getSkill AS level_skill 
            FROM members 
               INNER JOIN exp ON members.id = exp.member_id 
               INNER JOIN lvl ON members.id = lvl.member_id 
           ORDER BY lvl.$getSkill DESC, exp.$getSkill DESC';

$query = $db->prepare($query);   
        $query->execute();
        $row = $query->fetch();
0 голосов
/ 30 сентября 2018

Переменные не оцениваются внутри строк с одинарными кавычками.Вам необходимо использовать двойные кавычки и заключить имя в фигурные скобки ({}):

$query = $db->prepare("SELECT members.*, exp.*, lvl.*, exp.${getSkill} AS exp_skill, lvl.$getSkill AS level_skill FROM members INNER JOIN exp ON members.id = exp.member_id INNER JOIN lvl ON members.id = lvl.member_id ORDER BY lvl.$getSkill DESC, exp.$getSkill DESC");

Обязательное примечание: Использование конкатенации строк в запросе SQL может потенциально подвергнуть ваш код атакам SQL Ijection.Вы должны быть очень осторожными, если собираетесь использовать такую ​​технику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...