Переменная в SQL-запросе не работает?

#php #sql #variables

#php #sql #переменные

Вопрос:

     if (isset($_SESSION['user_tz'])) {
        $posted = "CONVERT_TZ(p.posted_on, 'UTC', '{$_SESSION['user_tz']}')";
    } else {
        $posted = 'p.posted_on';
    }

    // Run the query:
    $q = "SELECT t.subject, p.message, username, DATE_FORMAT($posted, '%e-%b-%y %l:%i %p') AS posted FROM threads AS t LEFT JOIN posts AS p USING (thread_id) INNER JOIN users AS u ON p.user_id = u.user_id WHERE t.thread_id = $tid ORDER BY p.posted_on ASC";
  

Я изменил $ posted в запросе на простое «posted_on», которое возвращает время, я также попытался немного обернуть его в «и «», но в итоге это полностью нарушило его; для дальнейшего использования я хотел бы знать, почему эта переменная не передается в запрос. Вероятно, это что-то действительно простое, и я буду чувствовать себя глупо, но помощь была бы очень признательна.

Спасибо.

Комментарии:

1. Ваш синтаксис выглядит нормально. Вероятно, ваша ошибка существует в другом месте кода. Что произойдет, если вы замените $q = ... строку на echo $posted в том же месте?

2. Я получаю CONVERT_TZ(p.posted_on, 'UTC', '') , вы правы, что у меня было $_SESSION['user_tz'] = ''; для включенного файла, однако я установил для него значение NULL, а затем я получил ошибку неопределенной переменной, не будет ли набор if установлен $posted = p.posted_on if $_SESSION['user_tz'] = NULL; ??

Ответ №1:

NULL — допустимое значение для isset() для запуска TRUE. Использовать unset($_SESSION['user_tz']);

Ответ №2:

Мне кажется, что в том, как вы это написали, используется $posted в качестве значения для передачи в date_format. Что вам действительно нужно, так это содержимое $posted, поэтому вам нужно заключить его в кавычки и объединить значение в строку $ q.

Комментарии:

1. Строка запроса заключена в двойные кавычки, что означает, что PHP проанализирует любые переменные внутри строки. Одинарные кавычки потребовали бы объединения.